1. 简述
Java 不仅仅是一门编程语言, 还是一个由一系列计算机软件和规范组成的技术体系.
Java 的广告词为 "一次编写, 到处运行", 之所以能够做到 "跨平台", 是因为每个平台上不同的虚拟机屏蔽了硬件的差异, 而 Java 程序则是运行在虚拟机之上的.
本文简要介绍 Java 技术体系及 Java 虚拟机 (Java Virtual Machine, JVM) 的相关发展历程, 后文再进一步分析 Java 虚拟机的详细内容.
PS: 本文及接下来的 JVM 笔记内容主要来自周志明《深入理解 Java 虚拟机(第 3 版)》.
2. Java 技术体系
广义上讲, Kotlin,Groovy,JRuby 等运行于 Java 虚拟机上的编程语言及其相关程序都属于 Java 技术体系.
而从传统意义上来看, JCP 官方定义的 Java 技术体系主要包括:
各种硬件平台上的 Java 虚拟机
Class 文件格式
Java 类库 API
商业机构和开源社区的第三方 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 技术体系包含的内容如下:
3. JVM 家族
"Java 虚拟机" 只是一个概念, 它的实现产品众多, 下面简要介绍其发展历程.
- 3.1 Sun Classic/Exact VM
- Class VM (JDK 1.0)
世界上第一款商用 Java 虚拟机
纯解释器方式执行 Java 代码
对象查找基于句柄
Exact VM (JDK 1.2)
准确式内存管理: 虚拟机可以知道内存中某个位置的数据具体类型
3.2 HotSpot VM
Sun/OracleJDK 和 OpenJDK 中默认虚拟机
目前使用范围最广的 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 虚拟机.
3.3 Mobile/Embedded VM
Java ME 虚拟机
3.4 BEA JRockit/IBM J9 VM
这两个虚拟机曾与 HotSpot 虚拟机并称 "三大商业 Java 虚拟机".
JRockit
专注于服务端应用
不含解释器, 全部代码都由即时编译器编译后执行
J9 VM
职责分离与模块化优于 HotSpot VM
3.5 BEA Liquid VM/Azul VM
与特定硬件平台绑定, 软硬件配合的专有虚拟机
3.6 Apache Harmony/Google Android Dalvik VM
这两者是 "虚拟机", 而非 "Java 虚拟机".
Harmony VM
未通过 TCK 认证
未大规模商用
Dalvik VM
未遵循《Java 虚拟机规范》
不能直接执行 Java 的 Class 文件
3.7 Microsoft JVM
曾经是 Windows 系统下性能最好的 Java 虚拟机
3.8 其他
KVM: 曾在手机平台上得到广泛应用
- Java Card VM
- ......
其他还有很多各种各样的虚拟机, 不再一一列举. 值得注意的是一个比较新的 Java 虚拟机: Graal VM.
3.9 Graal VM
2018 年 4 月, Oracle Labs 公开的黑科技: Graal VM.
Graal VM 被官方称为 "Universal VM" 和 "Polyglot VM", 它是在 HotSpot 虚拟机基础上增强而成的跨语言全栈虚拟机. 可作为 "任何语言" 的运行平台, 包括:
Java,Scala,Groovy,Kotlin 等基于 Java 虚拟机之上的语言
C,C++,Rust 等基于 LLVM 的语言, 同时支持 JavaScript,Ruby,Python 等
如图所示:
而且自 JDK 10 起, HotSpot 中又加入了一个全新的即时编译器: Graal 编译器.
如若将来某一天 HotSpot 虚拟机真的被替换, Graal VM 很有可能 "上位".
4. 小结
本文主要介绍了 Java 技术体系和 Java 虚拟机的发展历程, 该部分内容了解即可, 后文再分析虚拟机的主要内容.
为便于回顾和总结, 这里将上述内容整理成了思维导图:
PS: 本文首发于微信公众号[WriteOnRead] .
来源: http://www.bubuko.com/infodetail-3464848.html