Java004 Java本身(JRE, JVM, JDK, J

2020-04-05  本文已影响0人  攻城狮托马斯

首先,解释一下这句话:

Java, platform compatible, write once, compile once, run everywhere on JVM.


这句话的意思是,任何的platform上, 只要装了JVM, 都可以跑以 .Class结尾的 byte code 文件. 

以下是JRE, JVM 和 JDK的关系

与C++不同的是,Java的代码在JVM上运行,因此兼容性很强,而C++做的是直接编译成platfrom能够跑的底层代码,虽然速度快,但对不同机器,甚至相同系统不同版本,都会造成差别。

从图上可以看到, .java文件先由compiler变成Byte Code,再传入到不同的JVM中。

当Byte Code到了JVM中,通常会有两种运行方式:

1.JVM 担当Interpreter的角色, 边执行边翻译, interprets the Java bytecode to pre-compiled routine on machine code.

2.JIT(Just in time) 直接翻译把bytecode编译成机器可以实现的代码,机器直接执行。

(当然,Interpreter还是不及C++ compile,实时翻译远不如两位native speaker面对面谈话)

那么为什么全部都用JIT呢?

由于JIT对每条字节码都进行编译,造成了编译过程负担过重。为了避免这样的情况,当前的JIT仅仅对常常运行的字节码进行编译,如循环等.(被调用足够多,足够 “热” 以后再用JIT进行编译并保存

深剖请看下文.

https://www.zhihu.com/question/37389356

Java中的单继承性:


Java中的class只能extends one class, 好处是:

1.每个object都有object特有的属性

2.避免Ambiguity

菱形结构反例:

Class A {

public void dummy() {

  System.out.println("dummy from A")

}

}

Class B extends A {

public void dummy() {

System.out.println("dummy from B")

}

}

Class C extends A {

public void dummy() {

System.out.println("dummy from C")

}

}

Then, when class D extends both B and C.

class D extends B, C {

}

Dummy的定义就模糊了

上一篇 下一篇

猜你喜欢

热点阅读