阿里 P8 写出的《深入理解 Java 虚拟机》最新版,轻松学会 JVM 底层
![](https://static001.geekbang.org/infoq/c0/c086b9025a200d1cdce367f1fc46b0a5.png)
前言
Java 是目前用户最多、使用范围最广的软件开发技术,Java 的技术体系主要由支撑 Java 程序运行的虚拟机、提供各开发领域接口支持的 Java 类库、Java 编程语言及许许多多的第三 E 方 Java 框架(如 Spring、 MyBatis 等) 构成。在国内,有关 Java 类库 API、Java 语言语法及第三方框架的技术资料和书籍非常丰富,相比而言,有关 Java 虚拟机的资料却显得异常贫乏。
随着 Java 技术的不断发展,它已被应用于越来越多的领域之中。其中一些领域,如互联网、能源、金融、通信等,对程序的性能、稳定性和扩展性方面会有极高的要求。一-段程序很可能在 10 个人同时使用时完全正常,但是在 10000 个人同时使用时就会缓慢、死锁甚至崩溃。毫无疑问,要满足 10000 个人同时使用,需要更高性能的物理硬件,但是在绝大多数情况下,提升硬件性能无法等比例提升程序的运行性能和并发能力,甚至有可能对程序运行状况没有任何改善。这里面有 Java 虚拟机的原因:为了达到“所有硬件提供一致的虚拟平台”的目的,牺牲了- -些硬件相关的性能特性。更重要的是人为原因:如果开发人员不了解虚拟机诸多技术特性的运行原理,就无法写出最适合虚拟机运行和自优化的代码。
让我们一起走进虚拟机的世界吧!【有需要的可以--> 点击这里即获取我的资料笔记 <--- 即可】
一、走进 Java
世界上并没有完美的程序,但我们并不因此而沮丧,因为写程序本来就是一个不断追求完美的过程。
1.1 概述
1.2 Java 技术体系
1.3 Java 发展史
1.4 Java 虚拟机家族
1.5 展望 J ava 技术的未来
1.6 实战:自己编译 JDK
1.7 本章小结
![](https://static001.geekbang.org/infoq/38/38d260180adfafc647bfca128e278c7d.png)
![](https://static001.geekbang.org/infoq/c1/c15db43c520265ff21efb47109aaded8.png)
二、自动内存管理
Java 与 C+ +之间有一堵由内存动态分配和垃圾收集技术所围成的高墙,墙外面的人想进去,墙里面的人却想出来。
第 2 章 Java 内存区域与内存溢出异常
2.1 概述
2.2 运行时数据区域
2.3 HotSpot 虚拟机对象探秘
2. 4 实战: 0utOfMem oryErr or 异常
2.5 本章小结
![](https://static001.geekbang.org/infoq/86/86b2fd53f0af26384280da2c6677e88b.png)
第 3 章垃圾收集器与内存分配策略
3.1 概述
3.2 对象已死?
3.3 垃圾收集算法
3.4 HotSp ot 的算法细节实现
3.5 经典垃圾收集器
3.6 低延迟垃圾收集器
3.7 选择合适的垃圾收集器
3.8 实战:内存分配与回收策略
3.9 小结
![](https://static001.geekbang.org/infoq/a1/a10ee4a3c19f5dc649e792289a6b532a.png)
第 4 章虚拟机性能监控、故障处理工具
4.1 概述
4.2 基础故障处理工具
4.3 可视化故障处理工具
4.4 HotSpot 虚拟机插件及工具
4.5 本章小结
![](https://static001.geekbang.org/infoq/eb/eb7e66a50e366f537651fe4998e76862.png)
第 5 章调优案例分析与实战
5.1 概述
5.2 案例分析
5.3 实战: Eclipse 运行速度调优
5.4 本章小结
![](https://static001.geekbang.org/infoq/b6/b695b20db7f431db03f0a8918930442f.png)
三、虚拟机执行子系统
代码编译的结果从本地机器码转变为字节码,是存储格式发展的一-小步,却是编程语言发展的一大步。
第 6 章:类文件结构
6.1 概述
6.2 无关性的基石
6.3 Class 类文件的结构
6.4 字节码指令简介
6.5 公有设计,私有实现
6.6 Class 文件结构的发展
6.7 本章小结
![](https://static001.geekbang.org/infoq/47/4731e7f6b1fe28ee78968164a66bfe48.png)
第 7 章:虚拟机类加载机制
7. 1 概述
7.2 类加载的时机
7.3 类加载的过程
7.4 类加载器
7.5 Java 模块化系统
7.6 本章小结
![](https://static001.geekbang.org/infoq/cd/cd1d88fbeedf354dae727294deb57fbb.png)
第 8 章:虚拟机字节码执行引擎
8.1 概述
8.2 运行时栈帧结构
8.3 方法调用
8.4 动态类型语言支持
8.5 基于栈的字节码解释执行引擎
8.6 本章小结
![](https://static001.geekbang.org/infoq/8c/8c87e7423a1c1243e2f2bb0155481c6e.png)
第 9 章:类加载及执行子系统的案例与实战
9.1 概述
9.2 案例分析
9.3 实战:自己动手实现远程执行功能
9.4 本章小结
四、程序编译与代码优化
从计算机程序出现的第一天起, 对效率的追逐就是程序员天生的坚定信仰,这个过程犹如一场没有终点、永不停歇的 F1 方程式竞赛,程序员是车手,技术平台则是在赛道上飞驰的赛车。
第 10 章:前端编译与优化
10. 1 概述
10.2 Javac 编译器
10.3 Java 语法糖的味道
10. 4 实战:插入式注解处理器
10. 5 本章小结
![](https://static001.geekbang.org/infoq/33/33f2dcd073425c95ff3fb7ee53a0f279.png)
第 11 章:后端编译与优化
11. 1 概述
11.2 即时编译器
11.3 提前编译器
11.4 编译器优化技术
11.5 实战:深入理解 Gr aal 编译器
11.6 本章小结
![](https://static001.geekbang.org/infoq/0c/0cda6dc469571e07c9951ebca14f38be.png)
五、高效并发
第 12 章:Java 内存模型与线程
并发处理的广泛应用是 AmdahI 定律代替摩尔定律成为计算机性能发展源动力的根本原因,也是人类压榨计算机运算能力的最有力武器。
12.1 概述
12.2 硬件的效率与一致性
12.3 Java 内存模型
12. 4 Java 与线程
12.5 Java 与协程
12.6 本章小结
![](https://static001.geekbang.org/infoq/ad/ad1fe44867346e72dbb64fb5f958de41.png)
第 13 章:线程安全与 锁优化
我们了解虚拟机 Java 内存模型的结构及操作,并且讲解了原子性、可见性、有序性在 Java 内存模型中的体现,介绍了先行发生原则的规则及使用。另外,我们还了解了线程在 Java 语言之中是如何实现的,以及代表 Java 未来多线程发展的新并发模型的工作原理。
关于“高效并发"这个话题,在本章中主要介绍了虚拟机如何实现“并发”在下一章中,我们的主要关注点将是虚拟机如何实现"高效”,以及虚拟机对我们编写的并发代码提供了什么样的优化手段。
13.1 概述
13.2 线程安全
13.3 锁优化
13.4 本章小结
![](https://static001.geekbang.org/infoq/4f/4f8f213c326ca0aa20166ba198c3dd9a.png)
【有需要的可以--> 点击这里即获取我的资料笔记 <--- 即可】
评论