开发进阶加薪利器:美团架构师最新版的深入理解 JVM 底层和源码 PDF
第一部分为后文的研究和讲解建立 了良好的基础。虽然了解 Java 技术的来龙去脉,以及编译自己的 OpenJDK 对于读者理解 Java 虚拟机并不是必须的,但是这些准备过程可以为走近 Java 技术和 Java 虚拟机提供良好的引导。
第 1 章 走近 Java
介绍了 Java 技术体系过去、现在的情况以及未来的发展趋势,并在实践中介绍了如何自己编译一个 OpenJDK 12。
![](https://static001.geekbang.org/infoq/1f/1f7db57f2b88c6c3b57c8ae5f4733b61.png)
![](https://static001.geekbang.org/infoq/95/9546185ec2599f6e8c2d84dd6d692bbf.png)
==============================================================================
因为程序员把控制内存的权力交给了 Java 虚拟机,所以可以在编码的时候享受自动内存管理的诸多优势,不过也正因为这个原因,一旦出现内存 泄漏和溢出方面的问题,如果不了解虚拟机是怎样使用内存的,那排查错误将会成为一项异常艰难的工作。
第 2 章 Java 内存区域与内存溢出异常
介绍了虚拟机中内存是如何划分的,哪部分区域、什么样的代码和操作可能导致内存溢出异常,并讲解了各个区域出现内存溢出异常的常见原因。
![](https://static001.geekbang.org/infoq/06/06835ffdc61fdc96fb87b4aead19b97b.png)
![](https://static001.geekbang.org/infoq/0c/0cc8968bc8c55acdd89d1953c49feccd.png)
*第 3 章 垃圾收集器与内存分配策略
介绍了垃圾收集的算法和 HotSpot 虚拟机中提供的几款垃圾收集器的特点及运作原理。通过代码实例验证了 Java 虚拟机中自动内存分配及回收的主要规则。
![](https://static001.geekbang.org/infoq/e3/e3c0fe870c13a116588338dba633bab9.png)
![](https://static001.geekbang.org/infoq/27/2784657f08d9f2c692072b929a7a58ae.png)
第 4 章 虚拟机性能监控、故障处理工具
介绍了随 JDK 发布的基础命令行工具与可视化的故障处理工具的使用方法。
![](https://static001.geekbang.org/infoq/5b/5b210a3c5db912095d5be82336397ca9.png)
第 5 章 调优案例分析与实战
分享了几个比较有代表性的实际案例,还准备了-给所有开发人员都能"亲身实战”的练习,希望读者能通过实践来获得故障处理和调优的经验。
![](https://static001.geekbang.org/infoq/99/99c4f0db615652bb1a0d830561e107b3.png)
![](https://static001.geekbang.org/infoq/45/454382f76f8b2581ba04bc2d29c61804.png)
================================================================================
执行子系统是虚拟机中必不可少的组成部分,了解了虚拟机如何执行程序,才能更好地理解怎样才能写出优秀的代码。
第 6 章 类文件结构
讲解了 Class 文件结构中的各个组成部分,以及每个部分的定义、数据结构和使用方法,以实战的方式演示了 Class 的数据是如何存储和访问的。
![](https://static001.geekbang.org/infoq/22/2290e546e5acecf6b9baa8cb29436dd6.png)
![](https://static001.geekbang.org/infoq/55/559fae94c56e5e92db5892c9180ebb65.png)
第 7 章 虚拟机类加载机制
介绍了类加载过程的“加载”"验证” “准备” “解析” 和"初始化"五个阶段中虚拟机分别进行了哪些动作,还介绍了类加载器的工作原理及其对虚拟机的意义。
![](https://static001.geekbang.org/infoq/31/31091545a72a2adcd5b7a845339d10ae.png)
![](https://static001.geekbang.org/infoq/6c/6c36423ef3e7b35ee6480eb6abdf409b.png)
第 8 章 虚拟机字节码执行引擎
分析了虚拟机在执行代码时,如何找到正确的方法、如何执行方法内的字节码,以及执行代码时涉及的内存结构。
![](https://static001.geekbang.org/infoq/dd/ddef236482d99289be26af841ad42f1c.png)
![](https://static001.geekbang.org/infoq/72/7299650c9ca5e701d12efe3d82f8bab9.png)
第 9 章 类加载及执行子系统的案例与实战
通过几个类加载及执行子系统的案例, 介绍了使用类加载器和处理器解码的一些值得欣赏和借鉴的思路,并通过一个实战练习加深读者对前面理论知识的理解。
![](https://static001.geekbang.org/infoq/f6/f6ecc3baad78452528543ef1602ac6e6.png)
![](https://static001.geekbang.org/infoq/20/203416e42cb942a03f450a70f17c5d9d.png)
=================================================================================
Java 程序从源码编译成字节码,再从字节码编译成本地机器码的这两个过程,从整体来看其实等同于一一个传统编译器所执行的编译前端、后端过程。
第 10 章 前端编译与优化
分析了 Java 语言中泛型、 主动装箱拆箱、条件编译等多种语法糖的前因后果,并实战练习了如何使用插入式注解处理器来完成一个检查程序命名规范的编译器插件。
![](https://static001.geekbang.org/infoq/ec/ec6312c67b8c781ff4349db4e8011245.png)
![](https://static001.geekbang.org/infoq/96/96bedcb91223459ca8d580eea6b531ee.png)
第 11 章 后端编译与优化
讲解了虚拟机的热点探测方法、HotSpot 的即时编译器、 编译触发条件,以及如何从虚拟机外部观察和分析即时编译的数据和结果,还选择了几种常见的编译器优化技术进行讲解。
![](https://static001.geekbang.org/infoq/ac/ac77fb9bfef6019d867f05cb6b393bcd.png)
![](https://static001.geekbang.org/infoq/08/08180e7f619e26d52d6ab792873de04d.png)
============================================================================
Java 语言和虚拟机提供了原生的、完善的多线程支持,使得它天生就适合开发多线程并发的应用程序。不过我们不能期望系统来完成所有与并发相关的处理,了解并发的内幕也是成为一位高级程序员不可缺少的课程。
评论