当前位置:主页 > 书籍配套资源 > Java配套资源
《深入理解Java虚拟机:JVM高级特性与最佳实践(第2版)》源代码

《深入理解Java虚拟机:JVM高级特性与最佳实践(第2版)》源代码

  • 更新:2022-04-21
  • 大小:3.8 MB
  • 类别:Java
  • 作者:周志明
  • 出版:机械工业出版社
  • 格式:PDF

  • 资源介绍
  • 相关推荐

本书第1版两年内印刷近10次,4家网上书店的评论近4000条,98%以上的评论全部为5星级的好评,是整个Java图书领域公认的经典著作和超级畅销书,繁体版在台湾也十分受欢迎。第2版在第1版的基础上做了很大的改进:根据最新的JDK1.7对全书内容进行了全面的升级和补充;增加了大量处理各种常见JVM问题的技巧和最佳实践;增加了若干与生产环境相结合的实战案例;对1版中的错误和不足之处的修正;等等。第2版不仅技术更新、内容更丰富,而且实战性更强。

全书共分为五大部分,围绕内存管理、执行子系统、程序编译与优化、高效并发等核心主题对JVM进行了全面而深入的分析,深刻揭示了JVM的工作原理。第一部分从宏观的角度介绍了整个Java技术体系、Java和JVM的发展历程、模块化,以及JDK的编译,这对理解本书后面内容有重要帮助。第二部分讲解了JVM的自动内存管理,包括虚拟机内存区域的划分原理以及各种内存溢出异常产生的原因;常见的垃圾收集算法以及垃圾收集器的特点和工作原理;常见虚拟机监控与故障处理工具的原理和使用方法。第三部分分析了虚拟机的执行子系统,包括类文件结构、虚拟机类加载机制、虚拟机字节码执行引擎。第四部分讲解了程序的编译与代码的优化,阐述了泛型、自动装箱拆箱、条件编译等语法糖的原理;讲解了虚拟机的热点探测方法、HotSpot的即时编译器、编译触发条件,以及如何从虚拟机外部观察和分析JIT编译的数据和结果;第五部分探讨了Java实现高效并发的原理,包括JVM内存模型的结构和操作;原子性、可见性和有序性在Java内存模型中的体现;先行发生原则的规则和使用;线程在Java语言中的实现原理;虚拟机实现高效并发所做的一系列锁优化措施。

封面图

目录

  • 前言
  • 第一部分走近Java
  • 第1章走近Java / 2
  • 1.1概述 / 2
  • 1.2Java技术体系 / 3
  • 1.3Java发展史 / 5
  • 1.4Java虚拟机发展史 / 9
  • 1.4.1Sun Classic / Exact VM / 9
  • 1.4.2Sun HotSpot VM / 11
  • 1.4.3Sun Mobile-Embedded VM / Meta-Circular VM / 12
  • 1.4.4BEA JRockit / IBM J9 VM / 13
  • 1.4.5Azul VM / BEA Liquid VM / 14
  • 1.4.6Apache Harmony / Google Android Dalvik VM / 14
  • 1.4.7Microsoft JVM及其他 / 15
  • 1.5展望Java技术的未来 / 16
  • 1.5.1模块化 / 17
  • 1.5.2混合语言 / 17
  • 1.5.3多核并行 / 19
  • 1.5.4进一步丰富语法 / 20
  • 1.5.564位虚拟机 / 21
  • 1.6实战:自己编译JDK / 22
  • 1.6.1获取JDK源码 / 22
  • 1.6.2系统需求 / 24
  • 1.6.3构建编译环境 / 25
  • 1.6.4进行编译 / 26
  • 1.6.5在IDE工具中进行源码调试 / 31
  • 1.7本章小结 / 35
  • 第二部分自动内存管理机制
  • 第2章Java内存区域与内存溢出异常 / 38
  • 2.1概述 / 38
  • 2.2运行时数据区域 / 38
  • 2.2.1程序计数器 / 39
  • 2.2.2Java虚拟机栈 / 39
  • 2.2.3本地方法栈 / 40
  • 2.2.4Java堆 / 41
  • 2.2.5方法区 / 41
  • 2.2.6运行时常量池 / 42
  • 2.2.7直接内存 / 43
  • 2.3HotSpot虚拟机对象探秘 / 43
  • 2.3.1对象的创建/ 44
  • 2.3.2对象的内存布局/ 47
  • 2.3.3对象的访问定位/ 48
  • 2.4实战:OutOfMemoryError异常 / 50
  • 2.4.1Java堆溢出 / 51
  • 2.4.2虚拟机栈和本地方法栈溢出 / 53
  • 2.4.3方法区和运行时常量池溢出 / 56
  • 2.4.4本机直接内存溢出 / 59
  • 2.5本章小结 / 60
  • 第3章垃圾收集器与内存分配策略 / 61
  • 3.1概述 / 61
  • 3.2对象已死吗 / 62
  • 3.2.1引用计数算法 / 62
  • 3.2.2可达性分析算法 / 64
  • 3.2.3再谈引用 / 65
  • 3.2.4生存还是死亡 / 66
  • 3.2.5回收方法区 / 68
  • 3.3垃圾收集算法 / 69
  • 3.3.1标记-清除算法 / 69
  • 3.3.2复制算法 / 70
  • 3.3.3标记-整理算法 / 71
  • 3.3.4分代收集算法 / 72
  • 3.4HotSpot的算法实现 / 72
  • 3.4.1枚举根节点 / 72
  • 3.4.2安全点 / 73
  • 3.4.3安全区域 / 74
  • 3.5垃圾收集器 / 75
  • 3.5.1Serial收集器 / 76
  • 3.5.2ParNew收集器 / 77
  • 3.5.3Parallel Scavenge收集器 / 79
  • 3.5.4Serial Old收集器 / 80
  • 3.5.5Parallel Old收集器 / 80
  • 3.5.6CMS收集器 / 81
  • 3.5.7G1收集器 / 84
  • 3.5.8理解GC日志 / 89
  • 3.5.9垃圾收集器参数总结 / 90
  • 3.6内存分配与回收策略 / 91
  • 3.6.1对象优先在Eden分配 / 91
  • 3.6.2大对象直接进入老年代 / 93
  • 3.6.3长期存活的对象将进入老年代 / 95
  • 3.6.4动态对象年龄判定 / 97
  • 3.6.5空间分配担保 / 98
  • 3.7本章小结 / 100
  • 第4章虚拟机性能监控与故障处理工具 / 101
  • 4.1概述 / 101
  • 4.2JDK的命令行工具 / 101
  • 4.2.1jps:虚拟机进程状况工具 / 104
  • 4.2.2jstat:虚拟机统计信息监视工具 / 105
  • 4.2.3jinfo:Java配置信息工具 / 106
  • 4.2.4jmap:Java内存映像工具 / 107
  • 4.2.5jhat:虚拟机堆转储快照分析工具 / 108
  • 4.2.6jstack:Java堆栈跟踪工具 / 109
  • 4.2.7HSDIS:JIT生成代码反汇编 / 111
  • 4.3JDK的可视化工具 / 114
  • 4.3.1JConsole:Java监视与管理控制台 / 115
  • 4.3.2VisualVM:多合一故障处理工具 / 122
  • 4.4本章小结 / 131
  • 第5章调优案例分析与实战 / 132
  • 5.1概述 / 132
  • 5.2案例分析 / 132
  • 5.2.1高性能硬件上的程序部署策略 / 132
  • 5.2.2集群间同步导致的内存溢出 / 135
  • 5.2.3堆外内存导致的溢出错误 / 136
  • 5.2.4外部命令导致系统缓慢 / 137
  • 5.2.5服务器JVM进程崩溃 / 138
  • 5.2.6不恰当数据结构导致内存占用过大 / 139
  • 5.2.7由Windows虚拟内存导致的长时间停顿 / 141
  • 5.3实战:Eclipse运行速度调优 / 142
  • 5.3.1调优前的程序运行状态 / 142
  • 5.3.2升级JDK 1.6的性能变化及兼容问题 / 145
  • 5.3.3编译时间和类加载时间的优化 / 150
  • 5.3.4调整内存设置控制垃圾收集频率 / 153
  • 5.3.5选择收集器降低延迟 / 157
  • 5.4本章小结 / 160
  • 第三部分虚拟机执行子系统
  • 第6章类文件结构 / 162
  • 6.1概述 / 162
  • 6.2无关性的基石 / 162
  • 6.3Class类文件的结构 / 164
  • 6.3.1魔数与Class文件的版本 / 166
  • 6.3.2常量池 / 167
  • 6.3.3访问标志 / 173
  • 6.3.4类索引、父类索引与接口索引集合 / 174
  • 6.3.5字段表集合 / 175
  • 6.3.6方法表集合 / 178
  • 6.3.7属性表集合 / 180
  • 6.4字节码指令简介 / 196
  • 6.4.1字节码与数据类型 / 197
  • 6.4.2加载和存储指令 / 199
  • 6.4.3运算指令 / 200
  • 6.4.4类型转换指令 / 202
  • 6.4.5对象创建与访问指令 / 203
  • 6.4.6操作数栈管理指令 / 203
  • 6.4.7控制转移指令 / 204
  • 6.4.8方法调用和返回指令 / 204
  • 6.4.9异常处理指令 / 205
  • 6.4.10同步指令 / 205
  • 6.5公有设计和私有实现 / 206
  • 6.6Class文件结构的发展 / 207
  • 6.7本章小结 / 208
  • 第7章虚拟机类加载机制 / 209
  • 7.1概述 / 209
  • 7.2类加载的时机 / 210
  • 7.3类加载的过程 / 214
  • 7.3.1加载 / 214
  • 7.3.2验证 / 216
  • 7.3.3准备 / 219
  • 7.3.4解析 / 220
  • 7.3.5初始化 / 225
  • 7.4类加载器 / 227
  • 7.4.1类与类加载器 / 228
  • 7.4.2双亲委派模型 / 229
  • 7.4.3破坏双亲委派模型 / 233
  • 7.5本章小结 / 235
  • 第8章虚拟机字节码执行引擎 / 236
  • 8.1概述 / 236
  • 8.2运行时栈帧结构 / 236
  • 8.2.1局部变量表 / 238
  • 8.2.2操作数栈 / 242
  • 8.2.3动态连接 / 243
  • 8.2.4方法返回地址 / 243
  • 8.2.5附加信息 / 244
  • 8.3方法调用 / 244
  • 8.3.1解析 / 244
  • 8.3.2分派 / 246
  • 8.3.3动态类型语言支持 / 258
  • 8.4基于栈的字节码解释执行引擎 / 269
  • 8.4.1解释执行 / 269
  • 8.4.2基于栈的指令集与基于寄存器的指令集 / 270
  • 8.4.3基于栈的解释器执行过程 / 272
  • 8.5本章小结 / 275
  • 第9章类加载及执行子系统的案例与实战 / 276
  • 9.1概述 / 276
  • 9.2案例分析 / 276
  • 9.2.1Tomcat:正统的类加载器架构 / 276
  • 9.2.2OSGi:灵活的类加载器架构 / 279
  • 9.2.3字节码生成技术与动态代理的实现 / 282
  • 9.2.4Retrotranslator:跨越JDK版本 / 286
  • 9.3实战:自己动手实现远程执行功能 / 289
  • 9.3.1目标 / 290
  • 9.3.2思路 / 290
  • 9.3.3实现 / 291
  • 9.3.4验证 / 298
  • 9.4本章小结 / 299
  • 第四部分程序编译与代码优化
  • 第10章早期(编译期)优化 / 302
  • 10.1概述 / 302
  • 10.2Javac编译器 / 303
  • 10.2.1Javac的源码与调试 / 303
  • 10.2.2解析与填充符号表 / 305
  • 10.2.3注解处理器 / 307
  • 10.2.4语义分析与字节码生成 / 307
  • 10.3Java语法糖的味道 / 311
  • 10.3.1泛型与类型擦除 / 311
  • 10.3.2自动装箱、拆箱与遍历循环 / 315
  • 10.3.3条件编译 / 317
  • 10.4实战:插入式注解处理器 / 318
  • 10.4.1实战目标 / 318
  • 10.4.2代码实现 / 319
  • 10.4.3运行与测试 / 326
  • 10.4.4其他应用案例 / 327
  • 10.5本章小结 / 328
  • 第11章晚期(运行期)优化 / 329
  • 11.1概述 / 329
  • 11.2HotSpot虚拟机内的即时编译器 / 329
  • 11.2.1解释器与编译器 / 330
  • 11.2.2编译对象与触发条件 / 332
  • 11.2.3编译过程 / 337
  • 11.2.4查看及分析即时编译结果 / 339
  • 11.3编译优化技术 / 345
  • 11.3.1优化技术概览 / 346
  • 11.3.2公共子表达式消除 / 350
  • 11.3.3数组边界检查消除 / 351
  • 11.3.4方法内联 / 352
  • 11.3.5逃逸分析 / 354
  • 11.4Java与C/C++的编译器对比 / 356
  • 11.5本章小结 / 358
  • 第五部分高效并发
  • 第12章Java内存模型与线程 / 360
  • 12.1概述 / 360
  • 12.2硬件的效率与一致性 / 361
  • 12.3Java内存模型 / 362
  • 12.3.1主内存与工作内存 / 363
  • 12.3.2内存间交互操作 / 364
  • 12.3.3对于volatile型变量的特殊规则 / 366
  • 12.3.4对于long和double型变量的特殊规则 / 372
  • 12.3.5原子性、可见性与有序性 / 373
  • 12.3.6先行发生原则 / 375
  • 12.4Java与线程 / 378
  • 12.4.1线程的实现 / 378
  • 12.4.2Java线程调度 / 381
  • 12.4.3状态转换 / 383
  • 12.5本章小结 / 384
  • 第13章线程安全与锁优化 / 385
  • 13.1概述 / 385
  • 13.2线程安全 / 385
  • 13.2.1Java语言中的线程安全 / 386
  • 13.2.2线程安全的实现方法 / 390
  • 13.3锁优化 / 397
  • 13.3.1自旋锁与自适应自旋 / 398
  • 13.3.2锁消除 / 398
  • 13.3.3锁粗化 / 400
  • 13.3.4轻量级锁 / 400
  • 13.3.5偏向锁 / 402
  • 13.4本章小结 / 403
  • 附录
  • 附录A编译Windows版的OpenJDK / 406
  • 附录B虚拟机字节码指令表 / 414
  • 附录CHotSpot虚拟机主要参数表 / 420
  • 附录D对象查询语言(OQL)简介 / 424
  • 附录EJDK历史版本轨迹 / 430

资源下载

资源下载地址1:https://pan.baidu.com/s/1FCHrm8l1wvUmP92RHVP6_Q

相关资源

网友留言