Java 不仅仅是一门编程语言,还是一个由一系列计算机软件和规范组成的技术体系。
Java 的广告词为 “一次编写,到处运行”,之所以能够做到”跨平台”,是因为每个平台上不同的虚拟机屏蔽了硬件的差异,而 Java 程序则是运行在虚拟机之上的。
本文简要介绍 Java 技术体系及 Java 虚拟机(Java Virtual Machine, JVM)的相关发展历程,后文再进一步分析 Java 虚拟机的详细内容。
PS: 本文及接下来的 JVM 笔记内容主要来自周志明《深入理解 Java 虚拟机(第3版)》。
广义上讲,Kotlin、Groovy、JRuby 等运行于 Java 虚拟机上的编程语言及其相关程序都属于 Java 技术体系。
而从传统意义上来看,JCP 官方定义的 Java 技术体系主要包括:
其中 Java 程序设计语言、Java 虚拟机、Java 类库三部分统称为 JDK(Java Development Kit),JDK 是支持 Java 程序开发的最小环境。
Java 类库 API 中的 Java SE API 子集和 Java 虚拟机统称为 JRE(Java Runtime Environment),JRE 是支持 Java 程序运行的标准环境。
PS: JCP 全称 Java Community Process,即 Java 社区,由业界多家技术巨头组成的社区,用于定义和发展 Java 的技术规范。
Java 技术体系包含的内容如下:
“Java 虚拟机” 只是一个概念,它的实现产品众多,下面简要介绍其发展历程。
由于 HotSpot 虚拟机是目前使用最广泛的,而且是目前 OracleJDK 和 OpenJDK 的默认虚拟机,后文的内容分析主要是针对该虚拟机。
终端执行 java -version 命令如下(不同机器会有所不同,此处仅供参考):
$ java -version
java version "1.8.0_191"
Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)
这里的 HotSpot(TM) 64-Bit Server VM 指的就是 HotSpot 虚拟机。
这两个虚拟机曾与 HotSpot 虚拟机并称”三大商业 Java 虚拟机”。
这两者是 “虚拟机”,而非 “Java 虚拟机”。
其他还有很多各种各样的虚拟机,不再一一列举。值得注意的是一个比较新的 Java 虚拟机:Graal VM。
2018 年 4 月,Oracle Labs 公开的黑科技:Graal VM。
Graal VM 被官方称为”Universal VM”和”Polyglot VM”,它是在 HotSpot 虚拟机基础上增强而成的跨语言全栈虚拟机。可作为”任何语言”的运行平台,包括:
如图所示:
而且自 JDK 10 起,HotSpot 中又加入了一个全新的即时编译器:Graal 编译器。
如若将来某一天 HotSpot 虚拟机真的被替换,Graal VM 很有可能”上位”。
本文主要介绍了 Java 技术体系和 Java 虚拟机的发展历程,该部分内容了解即可,后文再分析虚拟机的主要内容。
为便于回顾和总结,这里将上述内容整理成了思维导图: