深入理解Java虚拟机:JVM高级特性与最佳实践

深入理解Java虚拟机:JVM高级特性与最佳实践

第2版

8.91346 评价豆瓣读书
免费试读
精品满减专场满200减60、满100减30、满50减15、满20减6活动详情

作品简介

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

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

周志明:资深Java技术专家,对JavaEE企业级应用开发、OSGi、Java虚拟机和工作流等都有深入的研究,并在大量的实践中积累了丰富的经验。尤其精通Java虚拟机,撰写了大量与JVM相关的经典文章,被各大技术社区争相转载,是ITeye等技术社区公认的Java虚拟机方面的领袖人物之一。除本书外,还著有经典著作《深入理解OSGi:Equinox原理、应用与最佳实践》,广获读者好评。现任远光软件股份有限公司开发部总经理兼架构师,先后参与过国家电网、南方电网等多个国家级大型ERP项目的平台架构工作,对软件系统架构也有深刻的认识和体会。

作品目录

  1. 前言
  2. 第2版与第1版的区别
  3. 本书面向的读者
  4. 如何阅读本书
  5. 勘误和支持
  6. 致谢
  7. 第一部分 走近Java
  8. 第1章 走近Java
  9. 1.1 概述
  10. 1.2 Java技术体系
  11. 1.3 Java发展史
  12. 1.4 Java虚拟机发展史
  13. 1.5 展望Java技术的未来
  14. 1.6 实战:自己编译JDK
  15. 1.7 本章小结
  16. 第二部分 自动内存管理机制
  17. 第2章 Java内存区域与内存溢出异常
  18. 2.1 概述
  19. 2.2 运行时数据区域
  20. 2.3 HotSpot虚拟机对象探秘
  21. 2.4 实战:OutOfMemoryError异常
  22. 2.5 本章小结
  23. 第3章 垃圾收集器与内存分配策略
  24. 3.1 概述
  25. 3.2 对象已死吗
  26. 3.3 垃圾收集算法
  27. 3.4 HotSpot的算法实现
  28. 3.5 垃圾收集器
  29. 3.6 内存分配与回收策略
  30. 3.7 本章小结
  31. 第4章 虚拟机性能监控与故障处理工具
  32. 4.1 概述
  33. 4.2 JDK的命令行工具
  34. 4.3 JDK的可视化工具
  35. 4.4 本章小结
  36. 第5章 调优案例分析与实战
  37. 5.1 概述
  38. 5.2 案例分析
  39. 5.3 实战:Eclipse运行速度调优
  40. 5.4 本章小结
  41. 第三部分 虚拟机执行子系统
  42. 第6章 类文件结构
  43. 6.1 概述
  44. 6.2 无关性的基石
  45. 6.3 Class类文件的结构
  46. 6.4 字节码指令简介
  47. 6.5 公有设计和私有实现
  48. 6.6 Class文件结构的发展
  49. 6.7 本章小结
  50. 第7章 虚拟机类加载机制
  51. 7.1 概述
  52. 7.2 类加载的时机
  53. 7.3 类加载的过程
  54. 7.4 类加载器
  55. 7.5 本章小结
  56. 第8章 虚拟机字节码执行引擎
  57. 8.1 概述
  58. 8.2 运行时栈帧结构
  59. 8.3 方法调用
  60. 8.4 基于栈的字节码解释执行引擎
  61. 8.5 本章小结
  62. 第9章 类加载及执行子系统的案例与实战
  63. 9.1 概述
  64. 9.2 案例分析
  65. 9.3 实战:自己动手实现远程执行功能
  66. 9.4 本章小结
  67. 第四部分 程序编译与代码优化
  68. 第10章 早期(编译期)优化
  69. 10.1 概述
  70. 10.2 Javac编译器
  71. 10.3 Java语法糖的味道
  72. 10.4 实战:插入式注解处理器
  73. 10.5 本章小结
  74. 第11章 晚期(运行期)优化
  75. 11.1 概述
  76. 11.2 HotSpot虚拟机内的即时编译器
  77. 11.3 编译优化技术
  78. 11.4 Java与C/C++的编译器对比
  79. 11.5 本章小结
  80. 第五部分 高效并发
  81. 第12章 Java内存模型与线程
  82. 12.1 概述
  83. 12.2 硬件的效率与一致性
  84. 12.3 Java内存模型
  85. 12.4 Java与线程
  86. 12.5 本章小结
  87. 第13章 线程安全与锁优化
  88. 13.1 概述
  89. 13.2 线程安全
  90. 13.3 锁优化
  91. 13.4 本章小结
  92. 附录
  93. 附录A 编译Windows版的OpenJDK
  94. 附录B 虚拟机字节码指令表
  95. 附录C HotSpot虚拟机主要参数表
  96. 附录D 对象查询语言(OQL)简介
  97. 附录E JDK历史版本轨迹
载入中

热门划线

  1. 方法区(Method Area)与Java堆一样,是各个线程共享的内存区域,它用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。24 人
  2. 所有的对象实例以及数组都要在堆上分配19 人
  3. 运行时常量池(Runtime Constant Pool)是方法区的一部分。Class文件中除了有类的版本、字段、方法、接口等描述信息外,还有一项信息是常量池(Constant Pool Table),用于存放编译期生成的各种字面量和符号引用,这部分内容将在类加载后进入方法区的运行时常量池中存放。18 人
  4. 每条线程都需要有一个独立的程序计数器17 人
  5. 虚拟机栈描述的是Java方法执行的内存模型:每个方法在执行的同时都会创建一个栈帧(Stack Frame)用于存储局部变量表、操作数栈、动态链接、方法出口等信息。每一个方法从调用直至执行完成的过程,就对应着一个栈帧在虚拟机栈中入栈到出栈的过程。17 人
  6. 程序计数器(Program Counter Register)是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器14 人
  7. 安全区域是指在一段代码片段之中,引用关系不会发生变化。在这个区域中的任意地方开始GC都是安全的。我们也可以把Safe Region看做是被扩展了的Safepoint。14 人
  8. 准备阶段是正式为类变量分配内存并设置类变量初始值的阶段,这些变量所使用的内存都将在方法区中进行分配14 人
  9. 虚拟机遇到一条new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析和初始化过。如果没有,那必须先执行相应的类加载过程11 人
  10. 类需要同时满足下面3个条件才能算是“无用的类”:该类所有的实例都已经被回收,也就是Java堆中不存在该类的任何实例。加载该类的ClassLoader已经被回收。该类对应的java.lang.Class对象没有在任何地方被引用,无法在任何地方通过反射访问该类的方法。11 人

喜欢这本书的人也喜欢