第 1 章:走近 Java
本文最后更新于:1 年前
《深入理解Java虚拟机(第3版)》样例代码&勘误
https://github.com/fenixsoft/jvm_book
后印刷的书都会修正前面发现的错误,网上找到的 pdf 电子版书一般都不是彩色印刷,而电子版的图片是彩色的
一般都不是修正后的版本,需要特别留意。
以后买书得注意一下印刷版次是不是比较新的,便宜的可能就是早期版本。
口号:Write Once, Run Anywhere。(一次编译,到处运行。)
JCP:Java Community Process,Java 社区。
JCP 定义的 Java 技术体系:
- Java 程序设计语言
- 各种硬件平台上的 Java 虚拟机实现
- Class 文件格式
- Java 类库 API
- 来自商业机构和开源社区的第三方 Java 类库
JDK:Java Development Kit,包括:
- Java 程序设计语言
- Java 虚拟机
- Java 类库
JRE:Java Runtime Environment,包括:
- Java 虚拟机
- Java 类库 API中的 Java SE API 子集
Java 起源:绿色计划,目标是开发一种能够在各种消费性电子产品上运行的程序架构。
Java 虚拟机:
- 【Sun】Classic VM:
- 解释器和外挂的即时编译器只能二选一。
- 基于句柄(Handle)的对象查找方式。
因为垃圾收集后对象可能会被移动位置,所以要使用句柄来保持引用值的稳定。
- 【Sun】Exact VM:
- 使用准确式内存管理(Exact Memory Management,指虚拟机可以知道内存中某个位置的数据具体是什么类型)。
准确分辨出哪些内存是引用类型,是在垃圾收集时准确判断堆上的数据是否还可能被使用的前提。相比于 Classic VM 在定位对象时少了一次间接查找的开销。 - 有热点探测、两级即时编译器、编译器与解释器混合工作模式。
- 使用准确式内存管理(Exact Memory Management,指虚拟机可以知道内存中某个位置的数据具体是什么类型)。
- 【Sun/Oracle】HotSpot VM(与 Exact VM 功能几乎一样):
- 有热点代码探测技术。
通过执行计数器找出最具有编译价值的代码,通知即时编译器以方法为单位进行编译。 - 有两级即时编译器。
如果一个方法被频繁调用,或方法中有效循环次数很多,将会分别触发标准即时编译和栈上替换编译行为。 - 有编译器与解释器混合工作模式。
- 有热点代码探测技术。
- 【Google】Dalvik VM:
- 不是一个 Java 虚拟机(没有遵循《Java 虚拟机规范》,不能直接执行 Java 的 Class 文件),使用寄存器架构而不是 Java 虚拟机中常见的栈架构,但是它执行的 DEX(Dalvik Executable)文件可以通过 Class 文件转化而来。
- 【Google】ART VM:
- 支持提前编译(Ahead of Time Compilation,AOT)。
在移动设备性能不强时,提前编译比即时编译更容易获得高性能。但是破坏了“一次编译,到处运行”的承诺;而且很多根据运行信息优化的措施不能使用。
- 支持提前编译(Ahead of Time Compilation,AOT)。
面向未来的研究项目:
- 【Oracle】Graal VM:
- 口号:Run Programs, Faster Anywhere。
- 在 HotSpot 虚拟机基础上增强而成的跨语言全栈虚拟机,包括基于 Java 虚拟机之上的语言、基于 LLVM 的语言(C语言等)、JavaScript、Python、R 等。支持不同语言中混用对方的接口和对象。
- 基本工作原理:将源代码或源代码编译后的中间格式(LLVM 字节码等)通过解释器转换为能被 Graal VM 接受的中间表示,该过程成为程序特化(Specialized,或 Partial Evaluation)。
- Substrate VM:Graal VM 里的一个极小型的运行时环境,可以显著降低内存占用及启动时间,十分适合嵌入其他系统。
目标是替代 HotSpot,支持提前编译后的程序执行。
第 1 章:走近 Java
https://weichao.io/efb7904b4da2/