深入理解Java虚拟机(第3版)读书笔记

一、Java技术体系

1. 具体业务逻辑

Java程序设计语言。
Java类库API:提供各开发领域接口支持。
来自商业机构和开源社区的第三方Java开发框架(Spring、MyBatis等)。

2. 虚拟机

各种硬件平台上的Java虚拟机实现。
Class文件格式。
保障物理硬件平台的兼容性,管理内存等资源。
支撑Java程序运行。隐藏了复杂的底层技术以及机器与操作系统的差异性。运行程序的物理机不同,建立了统一的运行平台。任意一台Java虚拟机编译的程序,都能在任何Java虚拟机上正常运行。
JDK(Java Development Kit):Java程序设计语言;Java虚拟机;Java类库。是用于支持Java程序开发的最小环境。
JRE(Java Runtime Environment):Java类库API中的Java SE API子集;Java虚拟机。是支持Java程序运行的标准环境。

3. 虚拟机学习的来龙去脉

3.1 背景需求

大规模企业级的生产开发,避免缓慢、死锁、崩溃等问题,要求保证程序的性能、稳定性和扩展性。

3.2 原因分析

为了达到所有硬件提供一致的虚拟平台,虚拟机牺牲了一些硬件相关的性能特性,因此提升硬件性能≠等比例提升程序的运行性能和并发能力;甚至没有任何改善。

3.3 解决方案

商用的高性能Java虚拟机提供了优化参数和调节手段。
开发人员了解虚拟机技术特性的运行原理,写出最适合虚拟机运行和自优化的代码。

二、章节内容

1. 走近Java

第1章

Java技术发展史。编译自己的OpenJDK12。

2. 自动内存管理

第2章

虚拟机内存划分。不同代码和操作在各区域导致内存溢出异常。
虚拟机的基础结构:稳定的Java运行期数据区域;JDK8的永久代的落幕和元空间的登场。
Java虚拟机栈。

第3章

垃圾收集的算法。G1收集器。JDK11、12的ZGC和Shenandoah两款低延迟全并发收集器的详细原理解析(垃圾收集器未来的发展方向)。统一收集器接口;Epsilon。
HotSpot虚拟机提供的垃圾收集器的特点及运作原理。解决跨代引用的记忆集与卡表、解决并发标记的增量更新和原始快照算法,内存读、写屏障。
Java虚拟机中自动内存分配及回收的主要规则。

第4章

随JDK发布的基础命令行工具与可视化的故障处理工具的使用方法。
Java虚拟机的各种监控、管理等辅助工具的功能。
JDK9的JHSDB。
JFR和JMC的工作原理和使用方法。
JDK外部的工具(JIT Watch)。

第5章

故障处理和调优的经验。

3. 虚拟机执行子系统

第6章

Class文件是虚拟机的基础,版本跟进到JDK12。
结构的组成部分;每个部分的定义、数据结构和使用方法;Class数据的存储和访问。
“技术手册”:多查阅多阅读。
《Java虚拟机规范》对Class文件格式的增强。例如为了实现JDK9的Java模块化系统,属性表中新增了Module、ModulePackages、ModuleMain-Class三项新属性,常量池中加入CONSTANT_Module_info和CONSTANT_Package_info两个常量。为了实现JDK11新增的嵌套内(Java中的内部类)访问控制的API,属性表中又增加了NestHost和NestMembers两项属性。为进一步加强动态语言支持,在JDK11期间常量池中加入CONSTANT_Dynamic_info。

第7章

类加载过程的五个阶段(加载,验证,准备,解析,初始化)中虚拟机进行的动作。
类加载器的工作原理及其对虚拟机的意义。
JDK12的《Java虚拟机规范》标准。
JDK9引入了Java模块化系统。

第8章

Java虚拟机执行子系统的概念模型:虚拟机在执行代码时,找到正确的方法,执行方法内的字节码,执行代码涉及的内存结构。
Java虚拟机对动态类型语言支持的增强。

第9章

类加载及执行子系统的案例。
使用类加载器和处理字节码的思路。
实战练习。
模块化、Lambda表达式、动态语言相应的变化。

4. 程序编译与代码优化

Java程序:源码=》字节码=》本地机器码。等同一个传统编译器所执行的编译前端、后端过程。

第10章

Java语言中泛型、主动装箱拆箱、条件编译等多种语法糖的前因后果。
不同语言里泛型实现的方式。Java泛型出现的历史背景,和使用类型擦除来实现泛型的一些限制。
未来可能会在Java中出现的值类型等。
实战练习:使用插入时注解处理器,完成一个检查程序命名规范的编译器插件。

第11章

虚拟机的热点探测方法。
HotSpot的即时编译器、编译触发条件。提前编译器。HotSpot的Graal编译器、JVMCI接口。
从虚拟机外部观察和分析即时编译的数据和结果。
常见的编译期优化技术。
实战内容。

5. 高效并发

Java语言和虚拟机提供了原生完善的多线程支持。

第12章

虚拟机Java内存模型的结构及操作。
原子性、可见性和有序性在Java内存模型中的体现。
先行发生原则的规则及使用。
线程在Java语言中的实现。
实验室状态的Java协程的相关内容。新并发模型。

第13章

线程安全的概念和分类、同步实现的方式,虚拟机的底层运作原理。
虚拟机实现高效并发的锁优化措施。

三、参考资料

《Java 虚拟机规范》
《Java 语言规范》
《垃圾回收算法手册:自动内存管理的艺术》
《Virtual Machines:Versatile Platforms for Systems and Processes》
《Java 性能优化权威指南》

OracleJDK/OpenJDK HotSpot为例,讲述Java虚拟机通用原理。

你可能感兴趣的:(java,开发语言)