《虚拟机设计与实现 以JVM为例=ADVANCED DESIGN AND IMPLEMENTATION OF VIRTUAL MACHINES》求取 ⇩

第一部分虚拟机基础2

第1章虚拟机简介2

1.1 虚拟机类型2

1.2 为什么需要虚拟机3

1.3虚拟机示例4

1.3.1 JavaScript引擎4

1.3.2 Perl引擎5

1.3.3 Android Java VM5

1.3.4 Apache Harmony6

第2章虚拟机内部组成7

2.1虚拟机核心组件7

2.1.1 加载器与动态链接器7

2.1.2 执行引擎8

2.1.3 内存管理器8

2.1.4 线程调度器9

2.1.5 语言扩展9

2.1.6 传统模型与虚拟机模型10

2.2虚拟ISA11

2.2.1 JVM12

2.2.2 JVM与CLR15

第3章虚拟机中的数据结构17

3.1 对象与类17

3.2 对象表示18

3.3 方法描述18

第二部分虚拟机设计22

第4章执行引擎设计22

4.1解释器22

4.1.1 超级指令23

4.1.2 选择性内联23

4.2JIT编译23

4.2.1 基于方法的JIT24

4.2.2 基于踪迹的JIT26

4.2.3 基于区域的JIT29

4.3 解释器与JIT编译器的关系30

4.4 AOT编译31

4.5 编译时与运行时33

第5章垃圾回收设计37

5.1 对象生存期37

5.2 引用计数38

5.3 对象追踪40

5.4 RC与对象追踪42

5.5 GC安全点43

5.6常用追踪GC算法45

5.6.1 标记清除46

5.6.2 追踪复制46

5.7常用追踪GC变体48

5.7.1 标记压缩48

5.7.2 滑动压缩48

5.7.3 追踪转发49

5.7.4 标记复制50

5.7.5 分代式GC50

5.8移动式GC与非移动式GC53

5.8.1 数据局部性53

5.8.2 跳增指针分配53

5.8.3 空闲列表与分配位图53

5.8.4 离散大小列表54

5.8.5 标记位与分配位54

5.8.6 线程局部分配55

5.8.7 移动式GC与非移动式GC的混合56

第6章线程设计58

6.1 什么是线程58

6.2 内核线程与用户线程59

6.3 VM线程到OS线程的映射61

6.4 同步构件63

6.5monitor65

6.5.1 互斥65

6.5.2 条件变量66

6.5.3 monitorenter66

6.5.4 monitorexit69

6.5.5 Object.wait()71

6.5.6 Object.notify()71

6.6 原子73

6.7monitor与原子75

6.7.1 阻塞与非阻塞75

6.7.2 中央控制点75

6.7.3 锁与非锁75

6.7.4 非阻塞之上的阻塞76

6.8 回收器与修改器77

6.9 线程局部数据78

6.10GC的线程暂停支持81

6.10.1 GC安全点81

6.10.2 GC安全区域83

6.10.3 基于锁的安全点86

6.10.4 回收中的线程交互87

第三部分虚拟机内部支持92

第7章本地接口92

7.1 为何需要本地接口92

7.2从托管代码到本地代码的转换93

7.2.1 本地方法封装94

7.2.2 封装代码的GC支持96

7.2.3 封装代码的同步支持98

7.3 本地方法实现的绑定99

7.4 本地代码到托管代码的转换99

7.5本地代码到本地代码的转换102

7.5.1 通过JNI API的本地到本地转换102

7.5.2 为什么在本地到本地转换中使用JNI API105

第8章栈展开107

8.1 为何需要栈展开107

8.2Java方法帧的栈展开108

8.2.1 栈展开设计108

8.2.2 栈展开实现110

8.3本地方法帧的栈展开112

8.3.1 栈展开设计112

8.3.2 Java到本地封装设计114

8.3.3 栈展开实现116

8.3.4 本地帧与C帧117

第9章垃圾回收支持119

9.1 为何需要垃圾回收支持119

9.2在Java代码中支持垃圾回收121

9.2.1 GC-map121

9.2.2 带寄存器的栈展开124

9.3在本地代码中支持垃圾回收126

9.3.1 对象引用访问127

9.3.2 对象句柄实现129

9.3.3 GC安全性维护132

9.3.4 对象体访问133

9.3.5 对象分配135

9.4在同步方法中支持垃圾回收136

9.4.1 同步Java方法136

9.4.2 同步本地方法138

9.5Java与本地代码转换中的GC支持140

9.5.1 本地到Java140

9.5.2 Java到本地142

9.5.3 本地到本地142

9.6 全局根集144

第10章运行时辅助145

10.1 为何需要运行时辅助145

10.2带运行时辅助的VM服务设计147

10.2.1 运行时辅助操作147

10.2.2 运行时辅助实现148

10.2.3 JNI API作为运行时辅助150

10.3没有运行时辅助的VM服务设计151

10.3.1 运行时辅助的快速路径153

10.3.2 快速路径VM服务编程154

10.4 主要VM服务154

第11章异常抛出157

11.1保存异常抛出上下文157

11.1.1 VM保存的上下文158

11.1.2 Linux中OS保存的上下文158

11.1.3 Windows中OS保存的上下文159

11.1.4 同步与异步异常160

11.2本地代码内与跨本地代码异常处理161

11.2.1 本地代码内的异常处理161

11.2.2 带异常Java代码返回到本地代码162

11.2.3 带异常的本地代码返回到Java代码166

11.3 保存栈轨迹167

11.4 找到异常处理器169

11.5控制转移172

11.5.1 控制转移操作172

11.5.2 用于控制转移的寄存器173

11.5.3 数据寄存器恢复174

11.5.4 控制寄存器修正176

11.5.5 执行恢复176

11.5.6 未捕获异常179

第12章终结与弱引用180

12.1 终结180

12.2 为何需要弱引用182

12.3对象生存期状态184

12.3.1 对象状态转换185

12.3.2 引用队列187

12.3.3 引用对象状态转换187

12.4 引用对象实现189

12.5 引用对象处理顺序191

第13章虚拟机模块化设计194

13.1 VM组件194

13.2 对象信息暴露197

13.3 垃圾回收器接口199

13.4 执行引擎接口202

13.5 跨组件优化203

第四部分垃圾回收优化208

第14章针对吞吐量的GC优化208

14.1 部分堆回收与全堆回收之间的适应性调整208

14.2 分代式与非分代式算法之间的适应性调整213

14.3堆的空间大小的适应性调整217

14.3.1 空间大小扩展218

14.3.2 NOS大小219

14.3.3 部分转发NOS设计221

14.3.4 半空间NOS设计221

14.3.5 aged-mature NOS设计223

14.3.6 回退回收225

14.4 分配空间之间的适应性调整225

14.5 大OS页与预取230

第15章针对可扩展性的GC优化232

15.1 回收阶段232

15.2并行对象图遍历233

15.2.1 任务共享234

15.2.2 工作偷取234

15.2.3 任务推送235

15.3 并行对象标记238

15.4并行压缩239

15.4.1 并行LISP2压缩器239

15.4.2 对象依赖树241

15.4.3 带用于转发指针的目标表的压缩器244

15.4.4 基于对象节的压缩器246

15.4.5 单趟就地压缩器247

第16章针对响应性的GC优化249

16.1 区域式GC249

16.2并发追踪252

16.2.1 起始快照252

16.2.2 增量更新256

16.2.3 用三色术语表示并发追踪259

16.2.4 使用读屏障的并发追踪260

16.3并发根集枚举261

16.3.1 并发根集枚举设计262

16.3.2 在根集枚举过程中追踪堆265

16.3.3 并发栈扫描266

16.4并发回收调度267

16.4.1 调度并发根集枚举267

16.4.2 调度并发堆追踪269

16.4.3 并发回收调度271

16.4.4 并发回收阶段转换272

第17章并发移动式回收277

17.1并发复制:“目标空间不变”277

17.1.1 基于槽位的“目标空间不变”算法277

17.1.2 “目标空间不变”性280

17.1.3 对象转发282

17.1.4 基于对象的“目标空间不变”算法283

17.1.5 基于虚拟内存的“目标空间不变”算法285

17.2并发复制:“当前副本不变”286

17.2.1 对象移动风暴286

17.2.2 “当前副本不变”设计287

17.2.3 并发复制与并发堆追踪的关系289

17.3并发复制:“源空间不变”292

17.3.1 “源空间不变”设计292

17.3.2 部分转发“源空间不变”设计294

17.4 无STW的完整并发移动295

17.5并发压缩回收296

17.5.1 并发区域复制式回收296

17.5.2 基于虚拟内存的并发压缩299

第五部分线程交互优化308

第18章monitor性能优化308

18.1 惰性锁308

18.2瘦锁310

18.2.1 瘦锁锁定路径310

18.2.2 瘦锁解锁路径313

18.2.3 竞争标志重置支持316

18.3胖锁318

18.3.1 整合monitor数据结构318

18.3.2 交由OS来支持319

18.3.3 瘦锁膨胀为胖锁321

18.3.4 休眠等待被竞争瘦锁324

18.4Tasuki锁327

18.4.1 将同一个胖锁monitor用于竞争控制327

18.4.2 胖锁收缩为瘦锁331

18.5线程局部锁334

18.5.1 锁保留335

18.5.2 线程亲密锁339

第19章基于硬件事务内存的设计346

19.1硬件事务内存346

19.1.1 从事务数据库到事务内存346

19.1.2 Intel的HTM实现347

19.2使用HTM的monitor实现348

19.2.1 基于HTM的monitor的正确性问题349

19.2.2 基于HTM的monitor的性能问题352

19.3使用HTM的并发垃圾回收355

19.3.1 GC中HTM的机会355

19.3.2 复制式回收357

19.3.3 压缩式回收360

参考文献364

2020《虚拟机设计与实现 以JVM为例=ADVANCED DESIGN AND IMPLEMENTATION OF VIRTUAL MACHINES》由于是年代较久的资料都绝版了,几乎不可能购买到实物。如果大家为了学习确实需要,可向博主求助其电子版PDF文件。对合法合规的求助,我会当即受理并将下载地址发送给你。