《Java虚拟机精讲》PDF下载

  • 购买积分:11 如何计算积分?
  • 作  者:高翔龙编著
  • 出 版 社:北京:电子工业出版社
  • 出版年份:2015
  • ISBN:9787121257056
  • 页数:268 页
图书介绍:本书以极其精练的语句诠释了HotSpot VM的方方面面,比如:字节码的编译原理、字节码的内部组成结构、通过源码的方式剖析HotSpot VM的启动过程和初始化过程、Java虚拟机的运行时内存、垃圾收集算法、垃圾收集器(重点讲解了Serial收集器、ParNew收集器、Parallel收集器、CMS收集器和G1收集器)、类加载机制,以及HotSpot VM基于栈的架构模型和执行引擎(解释器的工作流程、JIT编译器的工作流程、分层编译策略、热点探测功能)等技术。

第1章 Java体系结构 1

1.1 认识Java 1

1.1.1 与生俱来的优点 2

1.1.2 语法结构和对象模型 4

1.1.3 历史版本追溯 5

1.2 Java重要概念 7

1.2.1 Java编程语言 7

1.2.2 字节码 7

1.2.3 Java API 8

1.2.4 Java虚拟机 8

1.3 安装与配置Java运行环境 10

1.3.1 Windows环境下的安装与配置 10

1.3.2 Linux环境下的安装与配置 11

1.3.3 编写Java程序 12

1.3.4 编译与运行 13

1.3.5 关键字与标示符 13

1.4 Java技术的新特性 14

1.4.1 Java模块化与OSGi技术 14

1.4.2 语言无关性 15

1.4.3 使用Fork/Join框架实现多核并行 16

1.4.4 丰富的语法特性 17

1.4.5 过渡到64位虚拟机 18

1.5 实战:玩转OpenJDK 19

1.5.1 JDK与OpenJDK的关系 19

1.5.2 基于OpenJDK深度定制的淘宝JVM(TaobaoVM) 20

1.5.3 下载OpenJDK源代码 22

1.5.4 构建编译环境 22

1.5.5 执行整个OpenJDK的编译 23

1.5.6 执行单独HotSpot的编译 26

1.5.7 导致编译失败的一些疑难杂症 29

1.5.8 使用GDB工具DebugHotSpot 30

1.6 本章小结 36

第2章 字节码的编译原理 37

2.1 javac编译器简介 37

2.1.1 javac与Eclipse Compiler forJava编译器 38

2.1.2 javac的使用与标准选项配置 39

2.1.3 编译原理 40

2.1.4 下载javac编译器源码 41

2.1.5 调用compile()方法执行编译 41

2.2 词法解析步骤 43

2.2.1 Token序列 45

2.2.2 源码字符集合与Token之间的对应关系 47

2.2.3 调用key()方法获取指定Token 48

2.2.4 调用nextToken()方法计算Token的获取规则 48

2.2.5 调用parseCompilationUnit()方法执行词法解析 49

2.3 语法解析步骤 51

2.3.1 调用qualident()方解析package语法节点 52

2.3.2 调用importDeclaration()方法解析import语法树 54

2.3.3 调用classDeclaration()方法解析class语法树 56

2.4 语义解析步骤 59

2.5 生成字节码 61

2.6 实战:使用javap工具分析字节码 62

2.7 实战:使用GCJ编译器将Java源码直接编译为本地机器指令 64

2.8 本章小结 66

第3章 字节码文件 67

3.1 字节码文件的内部组成结构 67

3.2 符号引用 73

3.2.1 类或者接口的全限定名 74

3.2.2 简单名称 74

3.2.3 描述符 74

3.3 常量池 76

3.3.1 CONSTANT_Utf8_info常量项 77

3.3.2 CONSTANT_Integer_info常量项 77

3.3.3 CONSTANT_Float_info常量项 78

3.3.4 CONSTANT_Long_info常量项 78

3.3.5 CONSTANT_Double_info常量项 79

3.3.6 CONSTANT_Class_info常量项 79

3.3.7 CONSTANT_String_info常量项 80

3.3.8 CONSTANT_Fieldref_info常量项 81

3.3.9 CONSTANT_Methodref_info常量项 81

3.3.10 CONSTANT_InterfaceMethodref_info常量项 82

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常量项 84

3.4 字段表 85

3.5 方法表 86

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属性 93

3.6.7 InnerClasses属性 94

3.6.8 BootstrapMethods属性 95

3.7 本章小结 96

第4章 剖析HotSpot的Launcher 97

4.1 HotSpot的源码目录结构 97

4.2 Launcher简介 99

4.3 跟踪Launcher的执行过程 101

4.3.1 使用Launcher启动JVM 101

4.3.2 启动函数main() 102

4.3.3 在主线程中执行JavaMain()函数 106

4.3.4 调用JNI_CreateJavaVM()函数初始化HotSpot 114

4.3.5 调用LoadClass()函数获取Java启动类 115

4.3.6 调用GetStaticMethodId()函数获取Java启动方法 116

4.3.7 调用CallStaticVoidMethod()函数执行Java启动方法 116

4.3.8 调用jni_DestroyJavaVM函数销毁HotSpot 119

4.4 实战:在Launcher中添加自定义函数模块 120

4.5 本章小结 121

第5章 剖析HotSpot的初始化过程 122

5.1 HotSpot的构成模块 122

5.2 Prims模块 124

5.2.1 JNI子模块 124

5.2.2 JVM子模块 125

5.2.3 JVMTI子模块 128

5.2.4 Perf子模块 129

5.3 Runtime模块 129

5.3.1 Thread子模块 131

5.3.2 调用create_vm()函数完成HotSpot的最终初始化 131

5.4 跟踪HotSpot的初始化过程 140

5.4.1 调用init()和init_2()函数初始化os模块 141

5.4.2 调用vm_init_globals()函数初始化全局数据结构 144

5.4.3 调用init_globals()函数初始化全局模块 144

5.5 本章小结 146

第6章 内存分配与垃圾回收 147

6.1 JVM的运行时内存区结构 147

6.2 线程共享内存区 148

6.2.1 Java堆区 148

6.2.2 方法区 150

6.2.3 运行时常量池 150

6.3 线程私有内存区 150

6.3.1 PC寄存器 151

6.3.2 Java栈 151

6.3.3 本地方法栈 152

6.4 性能监控区 152

6.5 自动内存管理 152

6.5.1 内存分配原理 153

6.5.2 逃逸分析与栈上分配 157

6.5.3 对象内存布局与OOP-Klass模型 158

6.5.4 GC的作用 159

6.5.5 垃圾标记:根搜索算法 160

6.5.6 垃圾回收:分代收集算法 161

6.6 垃圾收集器 164

6.6.1 串行回收:Serial收集器 165

6.6.2 并行回收:ParNew收集器 166

6.6.3 程序吞吐量优先:Parallel收集器 166

6.6.4 低延迟:CMS(Concurrent-Mark-Sweep)收集器 167

6.6.5 区域化分代式:G1(Garbage-First)收集器 170

6.6.6 垃圾收集的相关选项配置 172

6.7 实战:GC日志分析 175

6.7.1 不同GC日志的展示形式 175

6.7.2 使用GCHisto工具分析离线日志 179

6.8 实战:分析dump文件 181

6.8.1 使用jmap工具生成dump文件 181

6.8.2 使用MAT(MemoryAnalyzerTool)工具分析dump文件 182

6.9 本章小结 184

第7章 类加载机制 185

7.1 类加载器 185

7.1.1 抽象类ClassLoader 187

7.1.2 双亲委派模型 188

7.1.3 自定义类加载器 191

7.1.4 定位ClassNotFoundException异常 193

7.1.5 定位NoClassDefFoundError异常 194

7.2 类的加载过程 195

7.2.1 加载字节码 198

7.2.2 验证阶段 199

7.2.3 准备阶段 200

7.2.4 解析阶段 201

7.2.5 初始化阶段 201

7.3 实战:字节码文件的加密与解密 204

7.4 本章小结 208

第8章 剖析HotSpot的架构模型与执行引擎 209

8.1 栈帧的组成结构 209

8.1.1 局部变量表 211

8.1.2 操作数栈 212

8.1.3 动态链接 214

8.1.4 方法返回值 216

8.2 HotSpot中执行引擎的架构模型 216

8.2.1 本地机器指令 217

8.2.2 寄存器架构与栈式架构之间的区别 218

8.2.3 基于栈式架构的设计 221

8.2.4 调用call_stub()函数执行Java方法 222

8.2.5 栈顶缓存(Top-of-Stack Cashing)技术 225

8.2.6 实战:跟踪字节码解释器的执行步骤 227

8.3 解释器与JIT编译器 230

8.3.1 查阅HotSpot的运行时执行模式 231

8.3.2 解释器的工作机制与构成模块 232

8.3.3 JIT编译器的工作机制与构成模块 234

8.3.4 分层编译策略 235

8.3.5 热点探测功能 236

8.4 本章小结 239

附录A Java7新增语法特性 241

A.1 try-with-resources语句 241

A.2 泛型的“◇”类型推断运算符 245

A.3 声明二进制字面值 247

A.4 字面值下画线支持 248

A.5 switch表达式支持String类型 250

A.6 mutil-catch特性 251

A.7 NIO2.0文件系统的改变 255

附录B 指令助记符 262