《深入理解Java虚拟机 JVM高级特性与最佳实践》PDF下载

  • 购买积分:13 如何计算积分?
  • 作  者:周志明著
  • 出 版 社:北京:机械工业出版社
  • 出版年份:2011
  • ISBN:9787111349662
  • 页数:390 页
图书介绍:本书共分为五大部分。第一部分从宏观的角度介绍了整个Java技术体系的过去、现在和未来,以及如何独立地编译一个OpenJDK7,这对理解后面的内容有重要帮助作用。第二部分讲解了JVM的自动内存管理,包括虚拟机内存区域的划分原理以及各种内存溢出异常产生的原因;常见的垃圾收集算法以及垃圾收集器的特点和工作原理;常见的虚拟机的监控与调试工具的原理和使用方法。第三部分分析了虚拟机的执行子系统,包括Class的文件结构以及如何存储和访问Class中的数据;虚拟机的类创建机制以及类加载器的工作原理和它对虚拟机的意义;虚拟机字节码的执行引擎以及它在实行代码时涉及的内存结构。第四部分讲解了程序的编译与代码的优化,阐述了泛型、自动装箱拆箱、条件编译等语法糖的原理;讲解了虚拟机的热点探测方法、HotSpot的即时编译器、编译触发条件,以及如何从虚拟机外部观察和分析JIT编译的数据和结果;第五部分探讨了Java实现高效并发的原理,包括JVM内存模型的结构和操作;原子性、可见性和有序性在Java内存模型中的体现;先行发生原则的规则和使用;线程在Java语言中的实现原理;虚拟机实现高效并发所做的一系列锁优化措施。

第一部分 走近Java 2

第1章 走近Java 2

1.1概述 2

1.2 Java技术体系 3

1.3 Java发展史 5

1.4展望Java技术的未来 9

1.4.1模块化 9

1.4.2混合语言 9

1.4.3多核并行 11

1.4.4进一步丰富语法 12

1.4.5 64位虚拟机 13

1.5实战:自己编译JDK 13

1.5.1获取JDK源码 13

1.5.2系统需求 14

1.5.3构建编译环境 15

1.5.4准备依赖项 17

1.5.5进行编译 18

1.6本章小结 21

第二部分 自动内存管理机制 24

第2章 Java内存区域与内存溢出异常 24

2.1概述 24

2.2运行时数据区域 25

2.2.1程序计数器 25

2.2.2 Java虚拟机栈 26

2.2.3本地方法栈 27

2.2.4 Java堆 27

2.2.5方法区 28

2.2.6运行时常量池 29

2.2.7直接内存 29

2.3对象访问 30

2.4实战:OutOfMemoryError异常 32

2.4.1 Java堆溢出 32

2.4.2虚拟机栈和本地方法栈溢出 35

2.4.3运行时常量池溢出 38

2.4.4方法区溢出 39

2.4.5本机直接内存溢出 41

2.5本章小结 42

第3章 垃圾收集器与内存分配策略 43

3.1概述 43

3.2对象已死? 44

3.2.1引用计数算法 44

3.2.2根搜索算法 46

3.2.3再谈引用 47

3.2.4生存还是死亡? 48

3.2.5回收方法区 50

3.3垃圾收集算法 51

3.3.1标记-清除算法 52

3.3.2复制算法 52

3.3.3标记-整理算法 54

3.3.4分代收集算法 54

3.4垃圾收集器 55

3.4.1 Serial收集器 56

3.4.2 ParNew收集器 57

3.4.3 Parallel Scavenge收集器 59

3.4.4 Serial Old收集器 60

3.4.5 Parallel Old收集器 61

3.4.6 CMS收集器 61

3.4.7 G1收集器 64

3.4.8垃圾收集器参数总结 64

3.5内存分配与回收策略 65

3.5.1对象优先在Eden分配 66

3.5.2大对象直接进入老年代 68

3.5.3长期存活的对象将进入老年代 69

3.5.4动态对象年龄判定 71

3.5.5空间分配担保 73

3.6本章小结 75

第4章 虚拟机性能监控与故障处理工具 76

4.1概述 76

4.2 JDK的命令行工具 76

4.2.1 jps:虚拟机进程状况工具 79

4.2.2 jstat:虚拟机统计信息监视工具 80

4.2.3 jinfo:Java配置信息工具 82

4.2.4 jmap:Java内存映像工具 82

4.2.5 jhat:虚拟机堆转储快照分析工具 84

4.2.6 jstack:Java堆栈跟踪工具 85

4.3 JDK的可视化工具 87

4.3.1 JConsole:Java监视与管理控制台 88

4.3.2 VisualVM:多合一故障处理工具 96

4.4本章小结 105

第5章 调优案例分析与实战 106

5.1概述 106

5.2案例分析 106

5.2.1高性能硬件上的程序部署策略 106

5.2.2集群间同步导致的内存溢出 109

5.2.3堆外内存导致的溢出错误 110

5.2.4外部命令导致系统缓慢 112

5.2.5服务器JVM进程崩溃 113

5.3实战:Eclipse运行速度调优 114

5.3.1调优前的程序运行状态 114

5.3.2升级JDK1.6的性能变化及兼容问题 117

5.3.3编译时间和类加载时间的优化 122

5.3.4调整内存设置控制垃圾收集频率 126

5.3.5选择收集器降低延迟 130

5.4本章小结 133

第三部分 虚拟机执行子系统 136

第6章 类文件结构 136

6.1概述 136

6.2无关性的基石 136

6.3 Class类文件的结构 138

6.3.1魔数与Class文件的版本 139

6.3.2常量池 141

6.3.3访问标志 147

6.3.4类索引、父类索引与接口索引集合 148

6.3.5字段表集合 149

6.3.6方法表集合 153

6.3.7属性表集合 155

6.4 Class文件结构的发展 168

6.5本章小结 170

第7章 虚拟机类加载机制 171

7.1概述 171

7.2类加载的时机 172

7.3类加载的过程 176

7.3.1加载 176

7.3.2验证 178

7.3.3准备 181

7.3.4解析 182

7.3.5初始化 186

7.4类加载器 189

7.4.1类与类加载器 189

7.4.2双亲委派模型 191

7.4.3破坏双亲委派模型 194

7.5本章小结 197

第8章 虚拟机字节码执行引擎 198

8.1概述 198

8.2运行时栈帧结构 199

8.2.1局部变量表 199

8.2.2操作数栈 204

8.2.3动态连接 206

8.2.4方法返回地址 206

8.2.5附加信息 207

8.3方法调用 207

8.3.1解析 207

8.3.2分派 209

8.4基于栈的字节码解释执行引擎 221

8.4.1解释执行 221

8.4.2基于栈的指令集与基于寄存器的指令集 223

8.4.3基于栈的解释器执行过程 224

8.5本章小结 230

第9章 类加载及执行子系统的案例与实战 231

9.1概述 231

9.2案例分析 231

9.2.1 Tomcat:正统的类加载器架构 232

9.2.2 OSGi:灵活的类加载器架构 235

9.2.3字节码生成技术与动态代理的实现 238

9.2.4 Retrotranslator:跨越JDK版本 242

9.3实战:自己动手实现远程执行功能 246

9.3.1目标 246

9.3.2思路 247

9.3.3实现 248

9.3.4验证 255

9.4本章小结 256

第四部分 程序编译与代码优化 258

第10章 早期(编译期)优化 258

10.1概述 258

10.2 Javac编译器 259

10.2.1 Javac的源码与调试 259

10.2.2解析与填充符号表 262

10.2.3注解处理器 264

10.2.4语义分析与字节码生成 264

10.3 Java语法糖的味道 268

10.3.1泛型与类型擦除 268

10.3.2自动装箱、拆箱与遍历循环 273

10.3.3条件编译 275

10.4实战:插入式注解处理器 276

10.4.1实战目标 276

10.4.2代码实现 277

10.4.3运行与测试 284

10.4.4其他应用案例 286

10.5本章小结 286

第11章 晚期(运行期)优化 287

11.1概述 287

11.2 HotSpot虚拟机内的即时编译器 288

11.2.1解释器与编译器 288

11.2.2编译对象与触发条件 291

11.2.3编译过程 294

11.2.4查看与分析即时编译结果 297

11.3编译优化技术 301

11.3.1优化技术概览 301

11.3.2公共子表达式消除 305

11.3.3数组边界检查消除 307

11.3.4方法内联 307

11.3.5逃逸分析 309

11.4 Java与C C++的编译器对比 311

11.5本章小结 313

第五部分 高效并发 316

第12章 Java内存模型与线程 316

12.1概述 316

12.2硬件的效率与一致性 317

12.3 Java内存模型 318

12.3.1主内存与工作内存 319

12.3.2内存间交互操作 320

12.3.3对于volatile型变量的特殊规则 322

12.3.4对于long和double型变量的特殊规则 327

12.3.5原子性、可见性与有序性 328

12.3.6先行发生原则 330

12.4 Java与线程 333

12.4.1线程的实现 333

12.4.2 Java线程调度 337

12.4.3状态转换 339

12.5本章小结 341

第13章 线程安全与锁优化 342

13.1概述 342

13.2线程安全 343

13.2.1 Java语言中的线程安全 343

13.2.2线程安全的实现方法 348

13.3锁优化 356

13.3.1自旋锁与自适应自旋 356

13.3.2锁消除 357

13.3.3锁粗化 358

13.3.4轻量级锁 358

13.3.5偏向锁 361

13.4本章小结 362

附录A Java虚拟机家族 363

附录B 虚拟机字节码指令表 366

附录C HotSpot虚拟机主要参数表 372

附录D 对象查询语言(OQL)简介 376

附录E JDK历史版本轨迹 383