一、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虚拟机通用原理。