1.JVM
Java Virtual Machine Specification是一套标准。通过定义虚拟机,像真实计算机一样,运行字节码指令。JVM的好处是可以屏蔽操作系统的细节, 使Java可以一次编写,到处运行。
2. Hotspot
HotSpot 是JVM的一种实现,最初由Sun开发,现在被Oracle所有,除了Hotspot还有其他实现,如 JRockit, IBM J9等。
3.JDK
3.1 JDK vs JRE
Java Runtime Environment(JRE) 包含运行编译过的Java代码的基本组件, 包括JVM、类库。Java SE Development Kit(JDK)则更全,除了JRE,还有Java语言和工具(例如javac、javap)。JDK和JRE的关系如下图所示:
3.2 Oracle JDK vs Open JDK
Oracle JDK与OpenJDK都是HotSpot VM。从源码层面说,两者基本上是同一个东西。
从JDK7开始,Oracle JDK里的HotSpot VM,也是基于openjdk.java.net上OpenJDK的Mercurial代码库。HotSpot VM只有非常非常少量的功能没有在OpenJDK里,那部分在Oracle内部的代码库里。这些私有部分都不涉及JVM的核心功能。
但是对于最新的版本,例如Java 11,OpenJDK 基本上已经与Oracle JDK一致了, 也包含了Java Flight Recorder, Java Mission Control, Application Class-Data Sharing,和 ZGC.
4. Java到底是解释型语言还是编译型语言
其实,现在用编译型、解释型来分类编程语言已经有点力不从心了。JAVA的第一道工序是javac编译,当然目标文件是BYTECODE。后续可能有三种处理方式:
- 运行时,BYTECODE由JVM逐条解释执行,
- 运行时,部分代码可能由JIT翻译为目标机器指令(以method为翻译单位,还会保存起来,第二次执行就不用翻译了)直接执行;
- RTSJ。继JAVAC之后执行AOT二次编译,生成静态的目标平台代码(典型的就是IBM WEBSHPERE REAL TIME)。