【为何写作本书】
Java语言已经走过了20多个年头,在此期间虽然新语言层出不穷,但是都没有撼动Java的位置。可能是历史选择了Java,也可能是Java改变了历史,总之,Java无疑是一门成功的编程语言。这门语言之所以能如此成功,高性能语言虚拟机HotSpot功不可没。
客观地说,HotSpot VM是目前顶级的语言虚拟机之一,它的模板解释器是语言解释器的最终状态,除非有重大技术突破和方法论的改变,否则很难被超越。它的垃圾回收器也日臻完善,新的无停顿GC的出现标志着JVM正在迈向GC顶级俱乐部。它的即时编译器是权衡编译开销与应用吞吐量后得到的一个卓越且精湛的艺术品。
本书始于笔者博客上的系列文章,随着博文连载,便想将博文整理成册,以系统性地讨论HotSpot VM。鉴于OpenJDK社区将HotSpot VM分为运行时、编译器、垃圾回收器三个部分,本书也采用这种划分方式来组织内容。
【本书读者对象】
本书内容涉及较多的源码分析,所以除了需要读者具有基本的Java/JVM知识,也需要读者具有基本的C++语言常识。本书适合那些希望在Java语言方面有进一步提升的开发者,也适合任何对JVM底层感兴趣且想要一探究竟的开发者。同时,对编译器或垃圾回收器感兴趣的读者也能从中受益。
【本书特色】
本书既考虑到内容的广度也关注了技术的深度,详细描述了虚拟机的底层实现,并与上层Java语言或者库结合,以实用为目标展开介绍,同时还讨论了它们的深刻意义。
从内容广度的角度看,本书除了讨论耳熟能详的Java虚拟机技术外,还详细讨论了业界最新的通用虚拟机平台Graal VM、CDS/AppCDS/DynamicCDS、Instrumentation库、编译重放、非标准字节码、栈上替换,RTM锁、JIT编译器IR、JIT编译器可视化工具、编译逃离、EpsilonGC/ShenandoahGC/ZGC、G1字符串去重等技术,其中部分技术代表了社区的最新动向。
从内容深度的角度看,本书详细讨论了:
G1 GC的回收策略和底层代码实现;
C1编译器的HIR和LIR,以及针对不同IR上应用的优化;
C2编译器的Ideal Graph以及平台无关的优化技术;
CPU重排序与ObjectMonitor、Mutex的底层实现;
模板解释器的代码片段生成逻辑和字节码模板生成逻辑;
……
其中涉及的部分技术是Java虚拟机高性能的最终保证。
【如何阅读本书】
本书共11章,参考OpenJDK社区的划分方式,全书从逻辑上可分为运行时、编译器、垃圾回收器三个部分。
第一部分(第1~6章),介绍Java虚拟机运行时的相关知识;
第二部分(第7~9章),介绍编译基础知识和虚拟机的两个即时编译器;
第三部分(第10~11章),介绍各种垃圾回收器并深入分析G1 GC。
每个部分总体侧重某一个大的方向,但每个章节的独立性都较强,各章节间没有必然的联系。对于Java虚拟机相关技术知识储备充足、经验丰富的读者,可以按目录“索骥”,选择自己感兴趣的内容阅读。当然,推荐从第1章开始顺序阅读。
另外,因为HotSpot源码很多,出于篇幅考虑,本书在进行代码分析时,大多只给出了代码片段或者主要的函数名称,故建议读者使用带有全局文本搜索功能的编辑器或者IDE(如VSCode、IntelliJ IDEA、Sublime Text)来阅读本书