内容简介
第1章 初识HotSpot
1.1 JDK概述
1.1.1 JCP与JSR
1.1.2 JDK的发展历程
1.1.3 Java 7的语法变化
1.2动手编译虚拟机
1.2.1源代码下载
1.2.2 HotSpot 源代码结构
1.2.3搭建编译环境
1.2.4编译目标
1.2.5编译过程
1.2.6编译常见问题
1.3实战:在HotSpot内调试HelloWorld
1.3.1认识GDB
1.3.2准备调试脚本
1.4小结
第2章 启动
2.1 HotSpot内核
2.1.1如何阅读源代码
2.1.2 HotSpot内核框架
2.1.3 Prims
2.1.4 Services
2.1.5 Runtime
2.2启动
2.2.1 Launcher
2.2.2虚拟机生命周期
2.2.3入口:main函数
2.2.4主线程
2.2.5 InitializeJVM函数
2.2.6 JNI CreateJavaVM函数
2.2.7调用Java主方法
2.2.8 JVM退出路径
2.3系统初始化
2.3.1配置OS模块
2.3.2配置系统属性
2.3.3加载系统库
2.3.4启动线程
2.3.5 vm init_globals函数:初始化全局数据结构
2.3.6 init_globals函数:初始化全局模块
2.4小结
第3章 类与对象
3.1对象表示机制
3.1.1 OOP-Klass二分模型
3.1.2 Oops模块
3.1.3 OOP框架与对象访问机制
3.1.4 Klass与instanceKlass
3.1.5实战:用HSDB调试HotSpot
3.2类的状态转换
3.2.1入口:Class文件
3.2.2类的状态
3.2.3加载
3.2.4链接
3.2.5初始化
3.2.6实战:类的“族谱”
3.2.7实战:系统字典
3.3创建对象
3.3.1实例对象的创建流程
3.3.2实战:探测JVM内部对象
3.4小结
第4章 运行时数据区
4.1堆
4.1.1 Java的自动内存管理
4.1.2堆的管理
4.2线程私有区域
4.2.1 PC
4.2.2 JVM栈
4.3方法区
4.3.1纽带作用
4.3.2常量池
4.3.3常量池缓存:ConstantPoolCache
4.3.4方法的表示:methodoop
4.3.5方法的解析:将符号引用转换成直接引用
4.3.6代码放在哪里:ConstMethodOop
4.3.7实战:探测运行时常量池
4.4性能监控数据区:Perf Data
4.4.1描述这段空间:PerfMemory
4.4.2查看
4.4.3生产
4.5转储
4.5.1用VisualVM进行转储分析
4.5.2 JVM Crash
4.6小结
第5章 垃圾收集
5.1堆与GC
5.1.1垃圾收集
5.1.2分代收集
5.1.3快速分配
5.1.4栈上分配和逸出分析
5.1.5 GC公共模块
5.2垃圾收集器
5.2.1设计演进
5.2.2 CMS收集器
5.2.3 G1收集器
5.3实战:性能分析方法
5.3.1获取GC日志
5.3.2 GC监控信息
5.3.3内存分析工具
5.3.4选择合适的收集器与GC性能评估
5.3.5不要忽略JVM Crash日志
5.4小结
第6章栈
6.1硬件背景:了解真实机器
6.1.1程序是如何运行的
6.1.2 x86与栈帧
6.1.3 ARM对Java硬件级加速:Jazelle技术
6.2 Java栈
6.2.1寄存器式指令集与栈式指令集
6.2.2 HotSpot中的栈
6.2.3栈帧
6.2.4充分利用寄存器资源
6.2.5虚拟机如何调用 Java函数
6.2.6优化:栈顶缓存
6.2.7实战:操作数栈
6.3小结
第7章 解释器和即时编译器
7.1概述
7.2解释器如何工作
7.2.1 Interpreter模块
7.2.2 Code模块
7.2.3字节码表
7.2.4 Code Cache
7.2.5 InterpreterCodelet与Stub队列
7.2.6 Code生成器
7.2.7模板表与转发表
7.2.8实战:InterpreterCodelet
7.3即时编译器
7.3.1概述
7.3.2编译器模块
7.3.3编译器的基本结构
7.3.4实战:编译原理实践,了解编译中间环节
7.4小结
第8章 指令集
8.1再说栈式指令集
8.2数据传送
8.2.1局部变量、常量池和操作数栈之间的数据传送
8.2.2数据传送指令
8.2.3实战:数组的越界检查
8.3类型转换
8.4对象的创建和操作
8.5程序流程控制
8.5.1控制转移指令
8.5.2条件转移
8.5.3无条件转移
8.5.4复合条件转移
8.5.5实战:switch语句如何使用String
8.6运算
8.6.1加法:iadd
8.6.2取负:ineg
8.7函数的调用和返回
8.7.1 Java函数分发机制:VTABLE与ITABLE
8.7.2 invoke系列指令
8.7.3动态分发:覆盖
8.7.4静态分发:重载
8.8异常
8.8.1异常表
8.8.2创建异常
8.8.3try-catch
8.8.4 finally
8.9小结
第9章 虚拟机监控工具
9.1 Attach机制
9.1.1 AttachProvider与VirtualMachine
9.1.2命令的下发:executeO
9.1.3命令的执行:Attach Listener守护线程
9.2查看JVM进程
9.2.1用jps查看Java进程
9.2.2实战:定制jps,允许查看库路径
9.3查看和配置JVM
9.3.1用jinfo查看JVM参数配置
9.3.2实战:扩展flags选项,允许查看命令行参数
9.4堆内存转储工具
9.4.1 Heap Dump
9.4.2原理
9.5堆转储分析
9.5.1 Heap Dump分析工具:jhat
9.5.2实战:MAT分析过程
9.6线程转储分析
9.6.1 jstack
9.6.2实战:如何分析资源等待
9.7小结