[套装书]GraalVM与Java静态编译:原理与应用+深入解析Java虚拟机HotSpot(2册)

作者
林子熠 等
丛书名
Java核心技术系列
出版社
机械工业出版社
ISBN
9782112201810
简要
简介
很多JVM的底层技术细节你是否只了解表面? 面对JVM Crash或性能调优方面的问题时你是否会束手无策? . 面对上层Java应用发生的偏离预期的行为是否会不知所措? …… 这本书以源码分析为基础,从运行时、垃圾回收器、即时编译器3个维度全面、深入解析HotSpot VM的底层实现和工作机制,同时与上层的Java语言和库结合,指导读者解决JVM开发、JVM调优和JVM排错方面遇到的各种问题。 广度与深度兼顾:广度上涵盖Graal VM、CDS、Instrumentation、编译重放、非标准字节码、RTM锁、JIT调试工具、EpsilonGC/ShenandoahGC/ZGC、G1字符串去重等重要知识点;深度上深入解析了C1、C2、G1GC、ObjectMonitor、Mutex、模板解释器等的底层实现。 全书共 11 章,参考 OpenJDK 社区的划分方式来组织内容,分为运行时、即时编译器、垃圾回收器三个部分。 第一部分(第1~6章) 运行时 首先,从Java生态系统的角度,简单介绍了JDK、JVM、JEP、HotSpot VM、Graal VM,引导读者快速进入Java虚拟机的世界;然后从源码的角度深入解析了HotSpot VM的类可用机制、对象和类、运行时、模板解释器和并发设施。 第二部分(第7~9章) 即时编译器 首先重点介绍了即时编译器技术、编译理论、编译器调试方法等编译器的基础知识;然后详细讲解了C1和C2两个即时编译器的实现原理、工作机制和优化方法。 第三部分(第10~11章) 垃圾回收器 首先全面介绍了Epsilon GC、Serial GC、Parallel GC、CMS GC、G1 GC、Shenandoah GC、ZGC等各种垃圾回收器,然后重点剖析了G1 GC。
目录
[套装书具体书目]
8077278 - 深入解析Java虚拟机HotSpot - 9787111670315 - 机械工业出版社 - 定价 79
8085007 - GraalVM与Java静态编译:原理与应用 - 9787111696391 - 机械工业出版社 - 定价 89



---------------------------8085007 - GraalVM与Java静态编译:原理与应用---------------------------



前言
第一部分 从解释执行到静态编译:Java的编译发展之路
第1章 Java静态编译技术的诞生2
1.1 Java程序的运行生命周期3
1.1.1 初始化4
1.1.2 程序预热5
1.2 冷启动问题8
1.3 初识Java静态编译技术11
1.3.1 什么是Java静态编译11
1.3.2 静态编译的优势12
1.3.3 静态编译的局限性13
1.4 小结15
第2章 Java静态编译的业界实现16
2.1 Oracle GraalVM16
2.1.1 GraalVM是什么17
2.1.2 GraalVM静态编译优点19
2.1.3 GraalVM静态编译缺点20
2.1.4 GraalVM发展分析21
2.2 华为方舟编译器22
2.3 小结24
第3章 GraalVM整体结构25
3.1 子项目与组件25
3.2 GraalVM编译系统工具mx29
3.3 在IDE中打开GraalVM32
3.4 小结33
第4章 从Java程序到本地代码:静态编译应用流程34
4.1 获取GraalVM JDK35
4.1.1 下载发布版35
4.1.2 下载Docker镜像37
4.2 从源码编译37
4.2.1 编译准备37
4.2.2 编译38
4.3 获取依赖库40
4.4 预执行目标应用程序41
4.5 静态编译目标应用程序43
4.5.1 命令行模式编译43
4.5.2 配置文件模式45
4.5.3 Maven插件模式46
4.5.4 Gradle插件模式47
4.6 静态编译Java程序实例48
4.6.1 静态编译HelloWorld49
4.6.2 静态编译Spring Boot应用实例50
4.7 小结52
第二部分 静态编译实现原理
第5章 Substrate VM静态编译框架54
5.1 静态编译启动器55
5.2 静态编译实现流程57
5.2.1 类载入59
5.2.2 准备60
5.2.3 静态分析61
5.2.4 全局构建63
5.2.5 编译64
5.2.6 生成image65
5.2.7 写文件65
5.3 Substrate VM运行时支持67
5.3.1 内存管理67
5.3.2 系统信号处理机制69
5.4 小结70
第6章 Feature机制71
6.1 Feature机制概览71
6.2 Feature管理73
6.2.1 注册与调用Feature73
6.2.2 Feature依赖74
6.3 Feature影响编译流程75
6.3.1 Feature函数的入参回调75
6.3.2 访问ImageSingletons单例库76
6.4 GraalFeature实现静态编译优化77
6.4.1 GraalVM编译器基础知识77
6.4.2 扩展lowering79
6.4.3 注册图的扩展插件79
6.5 Feature接口函数80
6.6 小结82
第7章 编译时替换机制83
7.1 替换机制在Substrate VM中的应用84
7.2 基于注解的替换85
7.2.1 替换类85
7.2.2 替换枚举类型87
7.2.3 替换函数88
7.2.4 替换构造函数89
7.2.5 替换类中的域90
7.2.6 替换类的静态初始化函数92
7.3 实现原理93
7.3.1 替换机制责任链93
7.3.2 确定待替换元素集合96
7.3.3 自定义替换内容98
7.4 小结98
第8章 类提前初始化优化100
8.1 Java中的类初始化100
8.2 编译时的类初始化101
8.2.1 类提前初始化的性能分析102
8.2.2 类提前初始化的安全性分析103
8.3 优化实现原理106
8.3.1 早期阶段分析107
8.3.2 中期阶段分析109
8.3.3 后期阶段分析111
8.4 手动设置类初始化时机112
8.5 小结113
第9章 反射的实现与优化114
9.1 反射在传统Java中的实现115
9.2 基于配置的支持119
9.2.1 反射配置文件119
9.2.2 配置局限性121
9.3 Substrate VM的反射实现122
9.3.1 解析配置并注册反射信息123
9.3.2 反射函数常量折叠优化124
9.3.3 函数反射调用过程优化125
9.4 其他类似动态特性的支持126
9.4.1 JNI调用127
9.4.2 动态代理127
9.4.3 资源访问128
9.4.4 序列化特性129
9.5 小结129
第10章 序列化131
10.1 序列化特性的JDK原生实现131
10.1.1 序列化/反序列化基本流程132
10.1.2 序列化中的静态编译不友好特性133
10.2 静态编译的序列化实现136
10.2.1 解决动态类加载问题136
10.2.2 解决new抽象类问题138
10.2.3 静态初始化函数检查139
10.3 局限性139
10.4 小结141
第11章 跨语言编程:用Java语言编写共享库142
11.1 样例项目cinterfacetutorial 143
11.2 共享库的Java实现源码解析145
11.2.1 声明共享库上下文145
11.2.2 实现C基本数据结构146
11.2.3 实现C的结构体继承149
11.2.4 暴露共享库API149
11.2.5 直接调用C函数152
11.2.6 共享库函数的返回值153
11.3 静态编译JNI共享库153
11.3.1 JNIDemo项目组织结构153
11.3.2 JNI库API函数的声明155
11.3.3 JNI函数编程基本过程156
11.3.4 JNI函数参数传入String157
11.3.5 自定义JNI函数指针类型158
11.3.6 调用Java函数159
11.4 小结160
第12章 CLibrary机制161
12.1 isolate161
12.1.1 错误的多线程调用:简单复用isolate162
12.1.2 正确的多线程调用:为每个线程新建isolate163
12.1.3 正确的多线程调用:映射线程与isolate164
12.2 WordBase接口系统165
12.3 注解系统167
12.3.1 @CContext注解167
12.3.2 @CEntryPoint注解172
12.3.3 @InvokeCFunctionPointer注解173
12.4 正确释放内存173
12.5 小结175
第三部分 静态编译实战
第13章 静态编译Serverless应用到阿里云函数计算平台178
13.1 阿里云函数计算平台178
13.2 静态编译基于Micronaut的Spring-Boot示例项目179
13.3 部署到阿里云180
13.4 性能比较180
13.5 小结182
第14章 native-image-agent的实现183
14.1 native-image-agent与JVMTI183
14.2 实现静态编译的JVMTI Agent185
14.3 native-image-agent的可用选项188
14.4 小结190
第15章 调试191
15.1 编译debug版本的native image191
15.2 使用GDB调试native image193
15.2.1 启动GDB194
15.2.2 增加函数断点194
15.2.3 GDB TUI分屏界面195
15.2.4 单步调试197
15.2.5 查看Java对象的值197
15.3 小结199



---------------------------8077278 - 深入解析Java虚拟机HotSpot---------------------------


前  言
第1章 Java大观园 1
1.1 OpenJDK 1
1.2 JEP 2
1.3 Java虚拟机 4
1.4 HotSpot VM 5
1.4.1 源码模块 7
1.4.2 构建和调试 7
1.4.3 回归测试 12
1.5 Graal VM 14
1.6 本章小结 16
第2章 类可用机制 17
2.1 类的加载 17
2.1.1 字节码 17
2.1.2 类加载器 19
2.1.3 文件解析 21
2.2 类的链接 23
2.2.1 字节码验证 24
2.2.2 字节码重写 24
2.2.3 方法链接 26
2.3 类的初始化 32
2.4 类的重定义 35
2.5 本章小结 36
第3章 对象和类 38
3.1 对象与类 38
3.2 对象 39
3.2.1 创建对象 39
3.2.2 对象头 41
3.2.3 对象哈希值 43
3.3 类 44
3.3.1 字段遍历 45
3.3.2 虚表 46
3.4 本章小结 48
第4章 运行时 49
4.1 线程创生纪 49
4.1.1 容器化支持 51
4.1.2 Java线程 52
4.1.3 虚拟机线程 54
4.1.4 编译器线程 57
4.1.5 服务线程 58
4.1.6 计时器线程 58
4.2 Java线程 58
4.2.1 线程启动 60
4.2.2 线程停止 61
4.2.3 睡眠与中断 63
4.3 栈帧 66
4.4 Java/JVM沟通 68
4.4.1 JNI 69
4.4.2 JavaCalls 72
4.5 Unsafe类 74
4.5.1 堆外内存 75
4.5.2 内存屏障 75
4.5.3 阻塞和唤醒 76
4.5.4 对象数据修改 76
4.6 本章小结 77
第5章 模板解释器 78
5.1 解释器体系 78
5.1.1 C++解释器行为 78
5.1.2 模板解释器行为 79
5.2 机器代码片段 81
5.3 CodeCache 82
5.4 指令缓存刷新 84
5.5 解释器生成 86
5.5.1 普通方法入口 86
5.5.2 方法加锁 89
5.5.3 本地方法入口 90
5.5.4 标准字节码 91
5.5.5 非标准字节码 106
5.6 本章小结 107
第6章 并发设施 108
6.1 指令重排序 108
6.1.1 编译器重排序 109
6.1.2 处理器重排序 110
6.2 内存模型 112
6.2.1 happens-before内存模型 113
6.2.2 Java内存模型 114
6.3 基础设施 116
6.3.1 原子操作 116
6.3.2 ParkEvent 116
6.3.3 Parker 118
6.3.4 Monitor 120
6.4 锁优化 126
6.4.1 偏向锁 127
6.4.2 基本对象锁 128
6.4.3 重量级锁 128
6.4.4 RTM锁 131
6.5 本章小结 132
第7章 编译概述 133
7.1 编译器简介 133
7.1.1 运行时代码生成 134
7.1.2 JIT编译器 135
7.1.3 AOT编译器 136
7.1.4 JVMCI JIT编译器 136
7.2 即时编译技术 137
7.2.1 分层编译 137
7.2.2 栈上替换 138
7.2.3 退优化 139
7.3 编译理论基础 139
7.3.1 中间表示 139
7.3.2 基本块与控制流图 140
7.3.3 静态单赋值 142
7.3.4 规范化 142
7.3.5 值编号 143
7.3.6 自顶向下重写系统 144
7.3.7 循环不变代码外提概述 144
7.4 调试方法 145
7.4.1 编译日志 145
7.4.2 编译神谕 146
7.4.3 可视化工具 146
7.5 本章小结 149
第8章 C1编译器 150
8.1 编译流程 150
8.1.1 进入C1 150
8.1.2 高级中间表示 152
8.1.3 低级中间表示 153
8.2 从字节码到HIR 155
8.2.1 识别基本块 155
8.2.2 抽象解释 156
8.3 HIR代码优化 158
8.3.1 规范化 158
8.3.2 内联 159
8.3.3 基本块优化 160
8.3.4 值编号 160
8.3.5 数组范围检查 162
8.3.6 循环不变代码外提 162
8.4 从HIR到LIR 164
8.4.1 return生成 165
8.4.2 new生成 165
8.4.3 goto生成 166
8.4.4 线性扫描寄存器分配 167
8.5 本章小结 171
第9章 C2编译器 172
9.1 编译流程 172
9.1.1 进入C2 172
9.1.2 理想图 174
9.1.3 理想图流程概述 180
9.1.4 C2代码优化 183
9.1.5 代码生成流程 185
9.1.6 设置机器代码 186
9.2 构造理想图 187
9.2.1 构造示例 187
9.2.2 Identity、Ideal、GVN 191
9.3 机器无关优化 193
9.3.1 IGVN 193
9.3.2 逃逸分析 194
9.3.3 向量化 197
9.4 代码生成 199
9.4.1 指令选择 199
9.4.2 图着色寄存器分配 200
9.5 本章小结 203
第10章 垃圾回收 204
10.1 垃圾回收基础概述 204
10.1.1 GC Root 205
10.1.2 安全点 206
10.1.3 线程局部握手 208
10.1.4 GC屏障 209
10.2 Epsilon GC 209
10.2.1 源码结构 209
10.2.2 EpsilonHeap 210
10.2.3 对象分配 211
10.2.4 回收垃圾 212
10.3 Serial GC 212
10.3.1 弱分代假说 212
10.3.2 卡表 213
10.3.3 Young GC 214
10.3.4 Full GC 218
10.3.5 世界停顿 221
10.4 Parallel GC 221
10.4.1 多线程垃圾回收 221
10.4.2 GC任务管理器 223
10.4.3 并行与并发 226
10.5 CMS GC 227
10.5.1 回收策略 227
10.5.2 对象丢失问题 228
10.5.3 Old GC周期 229
10.5.4 并发模式失败 234
10.5.5 堆碎片化 235
10.6 G1 GC 235
10.6.1 简介 235
10.6.2 混合回收 236
10.7 Shenandoah GC 237
10.8 ZGC 239
10.9 本章小结 241
第11章 G1 GC 242
11.1 G1 GC简介 242
11.1.1 基于Region的堆 242
11.1.2 记忆集RSet 243
11.1.3 停顿预测模型 244
11.2 Young GC 245
11.2.1 选择CSet 245
11.2.2 清理根集 246
11.2.3 处理RSet 247
11.2.4 对象复制 247
11.3 Mixed GC 248
11.3.1 SATB 249
11.3.2 全局并发标记 251
11.3.3 对象复制 254
11.4 Full GC 254
11.5 字符串去重 255
11.6 本章小结 257

推荐

车牌查询
桂ICP备20004708号-3