更新时间:2024-01-08 16:12:45
封面
版权信息
前言
第1章 初探Java虚拟机
1.1 知根知底:追溯Java的发展历程
1.1.1 那些依托Java虚拟机的语言大咖们
1.1.2 Java发展史上的里程碑
1.2 跨平台的真相:Java虚拟机做中介
1.2.1 理解Java虚拟机的原理
1.2.2 看清Java虚拟机的种类
1.3 一切看我的:Java语言规范
1.3.1 词法的定义
1.3.2 语法的定义
1.3.3 数据类型的定义
1.3.4 Java语言规范总结
1.4 一切听我的:Java虚拟机规范
1.5 数字编码就是计算机世界的水和电
1.5.1 整数在Java虚拟机中的表示
1.5.2 浮点数在Java虚拟机中的表示
1.6 抛砖引玉:编译和调试虚拟机
1.7 小结
第2章 认识Java虚拟机的基本结构
2.1 谋全局者才能成大器:看穿Java虚拟机的架构
2.2 小参数能解决大问题:学会设置Java虚拟机的参数
2.3 对象去哪儿:辨清Java堆
2.4 函数如何调用:出入Java栈
2.4.1 局部变量表
2.4.2 操作数栈
2.4.3 帧数据区
2.4.4 栈上分配
2.5 类去哪儿了:识别方法区
2.6 小结
第3章 常用Java虚拟机参数
3.1 一切运行都有迹可循:掌握跟踪调试参数
3.1.1 跟踪垃圾回收—读懂虚拟机日志
3.1.2 类加载/卸载的跟踪
3.1.3 查看系统参数
3.2 让性能飞起来:学习堆的配置参数
3.2.1 最大堆和初始堆的设置
3.2.2 新生代的配置
3.2.3 堆溢出处理
3.3 别让性能有缺口:了解非堆内存的参数配置
3.3.1 方法区配置
3.3.2 栈配置
3.3.3 直接内存配置
3.4 Client和Server二选一:虚拟机的工作模式
3.5 小结
第4章 垃圾回收的概念与算法
4.1 内存管理清洁工:认识垃圾回收
4.2 清洁工具大PK:讨论常用的垃圾回收算法
4.2.1 引用计数法(Reference Counting)
4.2.2 标记清除法(Mark-Sweep)
4.2.3 复制算法(Copying)
4.2.4 标记压缩法(Mark-Compact)
4.2.5 分代算法(Generational Collecting)
4.2.6 分区算法(Region)
4.3 谁才是真正的垃圾:判断可触及性
4.3.1 对象的复活
4.3.2 引用和可触及性的强度
4.3.3 软引用—可被回收的引用
4.3.4 弱引用—发现即回收
4.3.5 虚引用—对象回收跟踪
4.4 垃圾回收时的停顿现象:Stop-The-World案例实战
4.5 小结
第5章 垃圾收集器和内存分配
5.1 一心一意一件事:串行回收器
5.1.1 新生代串行回收器
5.1.2 老年代串行回收器
5.2 人多力量大:并行回收器
5.2.1 新生代ParNew回收器
5.2.2 新生代ParallelGC回收器
5.2.3 老年代ParallelOldGC回收器
5.3 一心多用都不落下:CMS回收器(JDK 8及之前的版本)
5.3.1 CMS主要工作步骤
5.3.2 CMS主要的参数
5.3.3 CMS的日志分析
5.3.4 有关Class的回收
5.4 未来我做主:G1回收器(JDK 9及之后版本的默认回收器)
5.4.1 G1的内存划分和主要收集过程
5.4.2 G1的新生代GC
5.4.3 G1的并发标记周期
5.4.4 混合回收
5.4.5 必要时的Full GC
5.4.6 G1的日志
5.4.7 G1相关的参数
5.5 回眸:有关对象内存分配和回收的一些细节问题
5.5.1 禁用System.gc()
5.5.2 System.gc()使用并发回收
5.5.3 并行GC前额外触发的新生代GC
5.5.4 对象何时进入老年代
5.5.5 在TLAB上分配对象
5.5.6 finalize()函数对垃圾回收的影响
5.6 温故又知新:常用的GC参数
5.7 动手才是真英雄:垃圾回收器对Tomcat性能影响的实验
5.7.1 配置实验环境
5.7.2 配置性能测试工具JMeter
5.7.3 配置Web应用服务器Tomcat
5.7.4 实战案例1—初试串行回收器
5.7.5 实战案例2—扩大堆以提升系统性能
5.7.6 实战案例3—调整初始堆大小