Java虚拟机精讲

Java虚拟机精讲

暂无评价综合评分的显示会考虑用户真实性等多项因素,每部作品出现综合评分的时间不定。
8.144 评价豆瓣读书
春暖花开季 恰是读书时满500减300、满200减120、满100减60活动详情

作品简介

HotSpot VM是目前市面上高性能JVM的代表作之一,它采用解释器+JIT编译器的混合执行引擎,使得Java程序的执行性能从此有了质的飞跃。本书以极其精练的语句诠释了HotSpot VM的方方面面,比如:字节码的编译原理、字节码的内部组成结构、通过源码的方式剖析HotSpot VM的启动过程和初始化过程、Java虚拟机的运行时内存、垃圾收集算法、垃圾收集器(重点讲解了Serial收集器、ParNew收集器、Parallel收集器、CMS(Concurrent-Mark-Sweep)收集器和G1(Garbage-First)收集器)、类加载机制,以及HotSpot VM基于栈的架构模型和执行引擎(解释器的工作流程、JIT编译器的工作流程、分层编译策略、热点探测功能)等技术。

如果你对JVM感兴趣,并且从未接触过JVM,那么本书将会是你探索JVM世界的必备入门工具。

本书适用于任何对Java虚拟机感兴趣的Java开发人员、系统架构师、Java虚拟机爱好者。尤其是对于那些从未接触过Java虚拟机的Java开发人员,本书笔者竭尽所能用最精练和直接的语句诠释了有关Java虚拟机的方方面面,只要你熟练掌握了Java编程基础,那么阅读本书你将不会感觉到任何的吃力和枯燥乏味。

高翔龙:曾任平安科技高级架构师,负责高并发即时通讯系统“天下通”的系统架构设计、架构优化、核心功能研发等工作。目前就职于一家互联网创业公司,担任系统架构师,负责企业内部Hadoop大数据平台的推广和实施、系统性能调优、对新员工技术培训等工作,对系统架构设计、大数据、Java虚拟机等技术领域有着浓厚的兴趣和丰富的实战经验。

作品目录

  1. 前言
  2. 创作此书的目的
  3. 本书所面向的读者
  4. 本书内容
  5. 参考文献
  6. 感谢
  7. 第1章 Java体系结构
  8. 1.1 认识Java
  9. 1.1.1 与生俱来的优点
  10. 1.1.2 语法结构和对象模型
  11. 1.1.3 历史版本追溯
  12. 1.2 Java重要概念
  13. 1.2.1 Java编程语言
  14. 1.2.2 字节码
  15. 1.2.3 Java API
  16. 1.2.4 Java虚拟机
  17. 1.3 安装与配置Java运行环境
  18. 1.3.1 Windows环境下的安装与配置
  19. 1.3.2 Linux环境下的安装与配置
  20. 1.3.3 编写Java程序
  21. 1.3.4 编译与运行
  22. 1.3.5 关键字与标示符
  23. 1.4 Java技术的新特性
  24. 1.4.1 Java模块化与OSGi技术
  25. 1.4.2 语言无关性
  26. 1.4.3 使用Fork/Join框架实现多核并行
  27. 1.4.4 丰富的语法特性
  28. 1.4.5 过渡到64位虚拟机
  29. 1.5 实战:玩转OpenJDK
  30. 1.5.1 JDK与OpenJDK的关系
  31. 1.5.2 基于OpenJDK深度定制的淘宝JVM(TaobaoVM)
  32. 1.5.3 下载OpenJDK源代码
  33. 1.5.4 构建编译环境
  34. 1.5.5 执行整个OpenJDK的编译
  35. 1.5.6 执行单独HotSpot的编译
  36. 1.5.7 导致编译失败的一些疑难杂症
  37. 1.项目依赖不完整
  38. 2.项目依赖版本问题
  39. 3.Linux内核版本过高
  40. 1.5.8 使用GDB工具Debug HotSpot
  41. 1.6 本章小结
  42. 第2章 字节码的编译原理
  43. 2.1 javac编译器简介
  44. 2.1.1 javac与Eclipse Compiler for Java编译器
  45. 2.1.2 javac的使用与标准选项配置
  46. 2.1.3 编译原理
  47. 2.1.4 下载javac编译器源码
  48. 2.1.5 调用compile()方法执行编译
  49. 2.2 词法解析步骤
  50. 2.2.1 Token序列
  51. 2.2.2 源码字符集合与Token之间的对应关系
  52. 2.2.3 调用key()方法获取指定Token
  53. 2.2.4 调用nextToken()方法计算Token的获取规则
  54. 2.2.5 调用parseCompilationUnit()方法执行词法解析
  55. 2.3 语法解析步骤
  56. 2.3.1 调用qualident()方法解析package语法节点
  57. 2.3.2 调用importDeclaration()方法解析import语法树
  58. 2.3.3 调用classDeclaration()方法解析class语法树
  59. 2.4 语义解析步骤
  60. 2.5 生成字节码
  61. 2.6 实战:使用javap工具分析字节码
  62. 2.7 实战:使用GCJ编译器将Java源码直接编译为本地机器指令
  63. 2.8 本章小结
  64. 第3章 字节码文件
  65. 3.1 字节码文件的内部组成结构
  66. 3.2 符号引用
  67. 3.2.1 类或者接口的全限定名
  68. 3.2.2 简单名称
  69. 3.2.3 描述符
  70. 3.3 常量池
  71. 3.3.1 CONSTANT_Utf8_info常量项
  72. 3.3.2 CONSTANT_Integer_info常量项
  73. 3.3.3 CONSTANT_Float_info常量项
  74. 3.3.4 CONSTANT_Long_info常量项
  75. 3.3.5 CONSTANT_Double_info常量项
  76. 3.3.6 CONSTANT_Class_info常量项
  77. 3.3.7 CONSTANT_String_info常量项
  78. 3.3.8 CONSTANT_Fieldref_info常量项
  79. 3.3.9 CONSTANT_Methodref_info常量项
  80. 3.3.10 CONSTANT_InterfaceMethodref_info常量项
  81. 3.3.11 CONSTANT_NameAndType_info常量项
  82. 3.3.12 CONSTANT_MethodHandle_info常量项
  83. 3.3.13 CONSTANT_MethodType_info常量项
  84. 3.3.14 CONSTANT_InvokeDynamic_info常量项
  85. 3.4 字段表
  86. 3.5 方法表
  87. 3.6 属性表
  88. 3.6.1 Code属性
  89. 3.6.2 ConstantValue属性
  90. 3.6.3 Exceptions属性
  91. 3.6.4 LineNumberTable属性
  92. 3.6.5 SourceFile属性
  93. 3.6.6 LocalVariableTable属性
  94. 3.6.7 InnerClasses属性
  95. 3.6.8 BootstrapMethods属性
  96. 3.7 本章小结
  97. 第4章 剖析HotSpot的Launcher
  98. 4.1 HotSpot的源码目录结构
  99. 4.2 Launcher简介
  100. 4.3 跟踪Launcher的执行过程
  101. 4.3.1 使用Launcher启动JVM
  102. 4.3.2 启动函数main()
  103. 4.3.3 在主线程中执行JavaMain()函数
  104. 4.3.4 调用JNI_CreateJavaVM()函数初始化HotSpot
  105. 4.3.5 调用LoadClass()函数获取Java启动类
  106. 4.3.6 调用GetStaticMethodId()函数获取Java启动方法
  107. 4.3.7 调用CallStaticVoidMethod()函数执行Java启动方法
  108. 4.3.8 调用jni_DestroyJavaVM函数销毁HotSpot
  109. 4.4 实战:在Launcher中添加自定义函数模块
  110. 4.5 本章小结
  111. 第5章 剖析HotSpot的初始化过程
  112. 5.1 HotSpot的构成模块
  113. 5.2 Prims模块
  114. 5.2.1 JNI子模块
  115. 5.2.2 JVM子模块
  116. 5.2.3 JVMTI子模块
  117. 5.2.4 Perf子模块
  118. 5.3 Runtime模块
  119. 5.3.1 Thread子模块
  120. 5.3.2 调用create_vm()函数完成HotSpot的最终初始化
  121. 5.4 跟踪HotSpot的初始化过程
  122. 5.4.1 调用init()和init_2()函数初始化os模块
  123. 5.4.2 调用vm_init_globals()函数初始化全局数据结构
  124. 5.4.3 调用init_globals()函数初始化全局模块
  125. 5.5 本章小结
  126. 第6章 内存分配与垃圾回收
  127. 6.1 JVM的运行时内存区结构
  128. 6.2 线程共享内存区
  129. 6.2.1 Java堆区
  130. 6.2.2 方法区
  131. 6.2.3 运行时常量池
  132. 6.3 线程私有内存区
  133. 6.3.1 PC寄存器
  134. 6.3.2 Java栈
  135. 6.3.3 本地方法栈
  136. 6.4 性能监控区
  137. 6.5 自动内存管理
  138. 6.5.1 内存分配原理
  139. 6.5.2 逃逸分析与栈上分配
  140. 6.5.3 对象内存布局与OOP-Klass模型
  141. 6.5.4 GC的作用
  142. 6.5.5 垃圾标记:根搜索算法
  143. 6.5.6 垃圾回收:分代收集算法
  144. 6.6 垃圾收集器
  145. 6.6.1 串行回收:Serial收集器
  146. 6.6.2 并行回收:ParNew收集器
  147. 6.6.3 程序吞吐量优先:Parallel收集器
  148. 6.6.4 低延迟:CMS(Concurrent-Mark-Sweep)收集器
  149. 6.6.5 区域化分代式:G1(Garbage-First)收集器
  150. 6.6.6 垃圾收集的相关选项配置
  151. 6.7 实战:GC日志分析
  152. 6.7.1 不同GC日志的展示形式
  153. 1.Serial/Serial Old收集器的日志形式:
  154. 2.ParNew收集器的日志形式:
  155. 3.Parallel/Parallel Old收集器的日志形式:
  156. 4.CMS收集器的日志形式:
  157. 5.G1收集器的日志形式:
  158. 6.7.2 使用GCHisto工具分析离线日志
  159. 6.8 实战:分析dump文件
  160. 6.8.1 使用jmap工具生成dump文件
  161. 6.8.2 使用MAT(Memory Analyzer Tool)工具分析dump文件
  162. 6.9 本章小结
  163. 第7章 类加载机制
  164. 7.1 类加载器
  165. 7.1.1 抽象类ClassLoader
  166. 7.1.2 双亲委派模型
  167. 7.1.3 自定义类加载器
  168. 7.1.4 定位ClassNotFoundException异常
  169. 7.1.5 定位NoClassDefFoundError异常
  170. 7.2 类的加载过程
  171. 7.2.1 加载字节码
  172. 7.2.2 验证阶段
  173. 7.2.3 准备阶段
  174. 7.2.4 解析阶段
  175. 7.2.5 初始化阶段
  176. 7.3 实战:字节码文件的加密与解密
  177. 7.4 本章小结
  178. 第8章 剖析HotSpot的架构模型与执行引擎
  179. 8.1 栈帧的组成结构
  180. 8.1.1 局部变量表
  181. 8.1.2 操作数栈
  182. 8.1.3 动态链接
  183. 8.1.4 方法返回值
  184. 8.2 HotSpot中执行引擎的架构模型
  185. 8.2.1 本地机器指令
  186. 8.2.2 寄存器架构与栈式架构之间的区别
  187. 8.2.3 基于栈式架构的设计
  188. 8.2.4 调用call_stub()函数执行Java方法
  189. 8.2.5 栈顶缓存(Top-of-Stack Cashing)技术
  190. 8.2.6 实战:跟踪字节码解释器的执行步骤
  191. 8.3 解释器与JIT编译器
  192. 8.3.1 查阅HotSpot的运行时执行模式
  193. 8.3.2 解释器的工作机制与构成模块
  194. 8.3.3 JIT编译器的工作机制与构成模块
  195. 8.3.4 分层编译策略
  196. 8.3.5 热点探测功能
  197. 8.4 本章小结
  198. 附录A Java7新增语法特性
  199. A.1 try-with-resources语句
  200. A.2 泛型的“<>”类型推断运算符
  201. A.3 声明二进制字面值
  202. A.4 字面值下画线支持
  203. A.5 switch表达式支持String类型
  204. A.6 mutil-catch特性
  205. A.7 NIO2.0文件系统的改变
  206. 附录B 指令助记符
载入中

大家都喜欢