封面
版权信息
前言
第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 操作数栈
- APP免费
2.4.3 帧数据区
- APP免费
2.4.4 栈上分配
- APP免费
2.5 类去哪儿了:识别方法区
- APP免费
2.6 小结
- APP免费
第3章 常用Java虚拟机参数
- APP免费
3.1 一切运行都有迹可循:掌握跟踪调试参数
- APP免费
3.1.1 跟踪垃圾回收—读懂虚拟机日志
- APP免费
3.1.2 类加载/卸载的跟踪
- APP免费
3.1.3 查看系统参数
- APP免费
3.2 让性能飞起来:学习堆的配置参数
- APP免费
3.2.1 最大堆和初始堆的设置
- APP免费
3.2.2 新生代的配置
- APP免费
3.2.3 堆溢出处理
- APP免费
3.3 别让性能有缺口:了解非堆内存的参数配置
- APP免费
3.3.1 方法区配置
- APP免费
3.3.2 栈配置
- APP免费
3.3.3 直接内存配置
- APP免费
3.4 Client和Server二选一:虚拟机的工作模式
- APP免费
3.5 小结
- APP免费
第4章 垃圾回收的概念与算法
- APP免费
4.1 内存管理清洁工:认识垃圾回收
- APP免费
4.2 清洁工具大PK:讨论常用的垃圾回收算法
- APP免费
4.2.1 引用计数法(Reference Counting)
- APP免费
4.2.2 标记清除法(Mark-Sweep)
- APP免费
4.2.3 复制算法(Copying)
- APP免费
4.2.4 标记压缩法(Mark-Compact)
- APP免费
4.2.5 分代算法(Generational Collecting)
- APP免费
4.2.6 分区算法(Region)
- APP免费
4.3 谁才是真正的垃圾:判断可触及性
- APP免费
4.3.1 对象的复活
- APP免费
4.3.2 引用和可触及性的强度
- APP免费
4.3.3 软引用—可被回收的引用
- APP免费
4.3.4 弱引用—发现即回收
- APP免费
4.3.5 虚引用—对象回收跟踪
- APP免费
4.4 垃圾回收时的停顿现象:Stop-The-World案例实战
- APP免费
4.5 小结
- APP免费
第5章 垃圾收集器和内存分配
- APP免费
5.1 一心一意一件事:串行回收器
- APP免费
5.1.1 新生代串行回收器
- APP免费
5.1.2 老年代串行回收器
- APP免费
5.2 人多力量大:并行回收器
- APP免费
5.2.1 新生代ParNew回收器
- APP免费
5.2.2 新生代ParallelGC回收器
- APP免费
5.2.3 老年代ParallelOldGC回收器
- APP免费
5.3 一心多用都不落下:CMS回收器(JDK 8及之前的版本)
- APP免费
5.3.1 CMS主要工作步骤
- APP免费
5.3.2 CMS主要的参数
- APP免费
5.3.3 CMS的日志分析
- APP免费
5.3.4 有关Class的回收
- APP免费
5.4 未来我做主:G1回收器(JDK 9及之后版本的默认回收器)
- APP免费
5.4.1 G1的内存划分和主要收集过程
- APP免费
5.4.2 G1的新生代GC
- APP免费
5.4.3 G1的并发标记周期
- APP免费
5.4.4 混合回收
- APP免费
5.4.5 必要时的Full GC
- APP免费
5.4.6 G1的日志
- APP免费
5.4.7 G1相关的参数
- APP免费
5.5 回眸:有关对象内存分配和回收的一些细节问题
- APP免费
5.5.1 禁用System.gc()
- APP免费
5.5.2 System.gc()使用并发回收
- APP免费
5.5.3 并行GC前额外触发的新生代GC
- APP免费
5.5.4 对象何时进入老年代
- APP免费
5.5.5 在TLAB上分配对象
- APP免费
5.5.6 finalize()函数对垃圾回收的影响
- APP免费
5.6 温故又知新:常用的GC参数
- APP免费
5.7 动手才是真英雄:垃圾回收器对Tomcat性能影响的实验
- APP免费
5.7.1 配置实验环境
- APP免费
5.7.2 配置性能测试工具JMeter
- APP免费
5.7.3 配置Web应用服务器Tomcat
- APP免费
5.7.4 实战案例1—初试串行回收器
- APP免费
5.7.5 实战案例2—扩大堆以提升系统性能
- APP免费
5.7.6 实战案例3—调整初始堆大小
- APP免费
5.7.7 实战案例4—使用ParrellOldGC回收器
- APP免费
5.7.8 实战案例5—使用较小堆提高GC压力
- APP免费
5.7.9 实战案例6—测试ParallelOldGC的表现
- APP免费
5.7.10 实战案例7—测试ParNew回收器的表现
- APP免费
5.7.11 实战案例8—测试JDK 1.8的表现
- APP免费
5.7.12 实战案例9—使用高版本虚拟机提升性能
- APP免费
5.8 小结
- APP免费
第6章 性能监控工具
- APP免费
6.1 有我更高效:Linux下的性能监控工具
- APP免费
6.1.1 显示系统整体资源使用情况—top命令
- APP免费
6.1.2 监控内存和CPU—vmstat命令
- APP免费
6.1.3 监控I/O—iostat命令
- APP免费
6.1.4 多功能诊断器—pidstat工具
- APP免费
6.2 用我更高效:Windows下的性能监控工具
- APP免费
6.2.1 任务管理器
- APP免费
6.2.2 perfmon性能监控工具
- APP免费
6.2.3 ProcessExplorer进程管理工具
- APP免费
6.2.4 pslist命令—Windows下也有命令行工具
- APP免费
6.3 外科手术刀:JDK性能监控工具
- APP免费
6.3.1 查看Java进程—jps命令
- APP免费
6.3.2 查看虚拟机运行时信息—jstat命令
- APP免费
6.3.3 查看虚拟机参数—jinfo命令
- APP免费
6.3.4 导出堆到文件—jmap命令
- APP免费
6.3.5 JDK自带的堆分析工具—jhat命令
- APP免费
6.3.6 查看线程堆栈—jstack命令
- APP免费
6.3.7 远程主机信息收集—jstatd命令
- APP免费
6.3.8 多功能命令行—jcmd命令
- APP免费
6.3.9 性能统计工具—hprof
- APP免费
6.3.10 扩展jps命令
- APP免费
6.4 我是你的眼:图形化虚拟机监控工具JConsole
- APP免费
6.4.1 JConsole连接Java程序
- APP免费
6.4.2 Java程序概况
- APP免费
6.4.3 内存监控
- APP免费
6.4.4 线程监控
- APP免费
6.4.5 类加载情况
- APP免费
6.4.6 虚拟机信息
- APP免费
6.5 一目了然:可视化性能监控工具Visual VM
- APP免费
6.5.1 Visual VM连接应用程序
- APP免费
6.5.2 监控应用程序概况
- APP免费
6.5.3 Thread Dump和分析
- APP免费
6.5.4 性能分析
- APP免费
6.5.5 内存快照分析
- APP免费
6.5.6 BTrace介绍
- APP免费
6.6 来自JRockit的礼物:虚拟机诊断工具Mission Control
- APP免费
6.6.1 MBean服务器
- APP免费
6.6.2 飞行记录器(Flight Recorder)
- APP免费
6.7 小结
- APP免费
第7章 分析Java堆
- APP免费
7.1 对症才能下药:找到内存溢出的原因
- APP免费
7.1.1 堆溢出
- APP免费
7.1.2 直接内存溢出
- APP免费
7.1.3 过多线程导致OOM
- APP免费
7.1.4 永久区溢出
- APP免费
7.1.5 GC效率低下引起的OOM
- APP免费
7.2 无处不在的字符串:String在虚拟机中的实现
- APP免费
7.2.1 String对象的特点
- APP免费
7.2.2 有关String的内存泄漏
- APP免费
7.2.3 有关String常量池的位置
- APP免费
7.3 虚拟机也有内窥镜:使用MAT分析Java堆
- APP免费
7.3.1 初识MAT
- APP免费
7.3.2 浅堆和深堆
- APP免费
7.3.3 MAT堆分析案例解析
- APP免费
7.3.4 支配树(Dominator Tree)
- APP免费
7.3.5 Tomcat堆溢出分析
- APP免费
7.4 筛选堆对象:MAT对OQL的支持
- APP免费
7.4.1 Select子句
- APP免费
7.4.2 From子句
- APP免费
7.4.3 Where子句
- APP免费
7.4.4 内置对象与方法
- APP免费
7.5 更精彩的查找:Visual VM对OQL的支持
- APP免费
7.5.1 Visual VM的OQL基本语法
- APP免费
7.5.2 内置heap对象
- APP免费
7.5.3 对象函数
- APP免费
7.5.4 集合/统计函数
- APP免费
7.5.5 程序化OQL分析Tomcat堆
- APP免费
7.6 小结
- APP免费
第8章 锁与并发
- APP免费
8.1 安全就是锁存在的理由:锁的基本概念和实现
- APP免费
8.1.1 理解线程安全
- APP免费
8.1.2 对象头和锁
- APP免费
8.2 避免残酷的竞争:锁在Java虚拟机中的实现和优化
- APP免费
8.2.1 偏向锁
- APP免费
8.2.2 轻量级锁
- APP免费
8.2.3 锁膨胀
- APP免费
8.2.4 自旋锁
- APP免费
8.2.5 锁消除
- APP免费
8.3 应对残酷的竞争:锁在应用层的优化思路
- APP免费
8.3.1 减少锁持有时间
- APP免费
8.3.2 减小锁粒度
- APP免费
8.3.3 锁分离
- APP免费
8.3.4 锁粗化
- APP免费
8.4 无招胜有招:无锁
- APP免费
8.4.1 理解CAS
- APP免费
8.4.2 原子操作
- APP免费
8.4.3 新宠儿LongAdder
- APP免费
8.5 将随机变为可控:理解Java内存模型
- APP免费
8.5.1 原子性
- APP免费
8.5.2 有序性
- APP免费
8.5.3 可见性
- APP免费
8.5.4 Happens-Before原则
- APP免费
8.6 小结
- APP免费
第9章 Class文件结构
- APP免费
9.1 不仅跨平台,还能跨语言:语言无关性
- APP免费
9.2 虚拟机的基石:Class文件
- APP免费
9.2.1 Class文件的标志—魔数
- APP免费
9.2.2 Class文件的版本
- APP免费
9.2.3 存放所有常数—常量池
- APP免费
9.2.4 Class的访问标记(Access Flag)
- APP免费
9.2.5 当前类、父类和接口
- APP免费
9.2.6 Class文件的字段
- APP免费
9.2.7 Class文件的方法基本结构
- APP免费
9.2.8 方法的执行主体—Code属性
- APP免费
9.2.9 记录行号—LineNumberTable属性
- APP免费
9.2.10 保存局部变量和参数—LocalVariableTable属性
- APP免费
9.2.11 加快字节码校验—StackMapTable属性
- APP免费
9.2.12 Code属性总结
- APP免费
9.2.13 抛出异常—Exceptions属性
- APP免费
9.2.14 用实例分析Class的方法结构
- APP免费
9.2.15 我来自哪里—SourceFile属性
- APP免费
9.2.16 强大的动态调用—BootstrapMethods属性
- APP免费
9.2.17 内部类—InnerClasses属性
- APP免费
9.2.18 将要废弃的通知—Deprecated属性
- APP免费
9.2.19 Class文件总结
- APP免费
9.3 操作字节码:走进ASM
- APP免费
9.3.1 ASM体系结构
- APP免费
9.3.2 ASM之Hello World
- APP免费
9.4 小结
- APP免费
第10章 Class装载系统
- APP免费
10.1 来去都有序:看懂Class文件的装载流程
- APP免费
10.1.1 类装载的条件
- APP免费
10.1.2 加载类
- APP免费
10.1.3 验证类
- APP免费
10.1.4 准备
- APP免费
10.1.5 解析类
- APP免费
10.1.6 初始化
- APP免费
10.2 一切Class从这里开始:掌握ClassLoader
- APP免费
10.2.1 认识ClassLoader,看懂类加载
- APP免费
10.2.2 ClassLoader的分类
- APP免费
10.2.3 ClassLoader的双亲委托模式
- APP免费
10.2.4 双亲委托模式的弊端
- APP免费
10.2.5 双亲委托模式的补充
- APP免费
10.2.6 突破双亲模式
- APP免费
10.2.7 热替换的实现
- APP免费
10.3 小结
- APP免费
第11章 字节码执行
- APP免费
11.1 代码如何执行:字节码执行案例
- APP免费
11.2 执行的基础:Java虚拟机常用指令介绍
- APP免费
11.2.1 常量入栈指令
- APP免费
11.2.2 局部变量压栈指令
- APP免费
11.2.3 出栈装入局部变量表指令
- APP免费
11.2.4 通用型操作
- APP免费
11.2.5 类型转换指令
- APP免费
11.2.6 运算指令
- APP免费
11.2.7 对象操作指令
- APP免费
11.2.8 比较控制指令
- APP免费
11.2.9 函数调用与返回指令
- APP免费
11.2.10 同步控制
- APP免费
11.2.11 再看Class的方法结构
- APP免费
11.3 更上一层楼:再看ASM
- APP免费
11.3.1 为类增加安全控制
- APP免费
11.3.2 统计函数执行时间
- APP免费
11.4 谁说Java太刻板:Java Agent运行时修改类
- APP免费
11.4.1 使用-javaagent参数启动Java虚拟机
- APP免费
11.4.2 使用Java Agent为函数增加计时功能
- APP免费
11.4.3 动态重转换类
- APP免费
11.4.4 有关Java Agent的总结
- APP免费
11.5 与时俱进:动态方法调用
- APP免费
11.5.1 方法句柄使用实例
- APP免费
11.5.2 调用点使用实例
- APP免费
11.5.3 反射和方法句柄
- APP免费
11.5.4 指令invokedynamic使用实例
- APP免费
11.6 跑得再快点:静态编译优化
- APP免费
11.6.1 编译时计算
- APP免费
11.6.2 变量字符串的连接
- APP免费
11.6.3 基于常量的条件语句裁剪
- APP免费
11.6.4 switch语句的优化
- APP免费
11.7 提高虚拟机的执行效率:JIT及其相关参数
- APP免费
11.7.1 开启JIT编译
- APP免费
11.7.2 JIT编译阈值
- APP免费
11.7.3 多级编译器
- APP免费
11.7.4 OSR栈上替换
- APP免费
11.7.5 方法内联
- APP免费
11.7.6 设置代码缓存大小
- APP免费
11.8 小结
- APP免费
反侵权盗版声明
更新时间:2024-01-08 16:12:45