书籍详情
深入浅出:Java虚拟机设计与实现
作者:华保健 著
出版社:机械工业出版社
出版时间:2020-04-01
ISBN:9787111645245
定价:¥99.00
购买这本书可以去
内容简介
《深入浅出:Java虚拟机设计与实现》由国内编译器和虚拟机方面的研究者执笔,详细介绍了 Java 虚拟机设计与实现的各个方面,并给出了相关算法的实现。全书围绕虚拟机架构,讨论了虚拟机中的所有重要组件,包括类加载器、执行引擎、本地方法接口、异常处理、堆和垃圾收集、多线程及调试。 《深入浅出:Java虚拟机设计与实现》不仅关注对技术本身的介绍,还重点强调了这些技术所涉及的知识对读者进一步掌握工具和提高软件设计水平的重要作用,并给出了丰富的示例和*佳实践。 《深入浅出:Java虚拟机设计与实现》适合 Java 程序员、对编译器和虚拟机底层技术感兴趣的工程人员,以及高等院校计算机相关专业的学生阅读。
作者简介
暂缺《深入浅出:Java虚拟机设计与实现》作者简介
目录
前 言
第 1 章 虚拟机架构 /1
1.1 Java 与 Java 虚拟机 /1
1.1.1 设计背景 /1
1.1.2 Java 技术栈的组成要素 /2
1.1.3 Java 字节码 /3
1.2 Java 虚拟机架构 /5
1.3 实例:J 语言及其编译 /7
1.3.1 J 语言语法 /7
1.3.2 栈式计算机 /13
1.3.3 J 字节码 /17
1.3.4 J 语言编译到 J 字节码 /19
1.4 实例:J 虚拟机 /23
1.4.1 字节码加载子系统 /23
1.4.2 字节码验证器 /24
1.4.3 解释执行引擎 /27
第 2 章 类加载器 /30
2.1 实例:Java 的类加载 /30
2.2 类的二进制定义 /32
2.2.1 常量池 /34
2.2.2 接口 /36
2.2.3 字段 /37
2.2.4 方法 /37
2.2.5 属性 /38
2.3 方法区 /41
2.3.1 代码区 /41
2.3.2 运行时常量池 /45
2.3.3 类辅助数据结构 /47
2.4 类装载 /49
2.4.1 递归下降装载 /50
2.4.2 接口的装载 /57
2.4.3 数组的装载 /57
2.4.4 基本类的装载 /59
2.5 验证 /61
2.5.1 为什么要进行验证 /61
2.5.2 验证的目标 /63
2.5.3 实例:验证规则 /63
2.5.4 结构化约束 /68
2.5.5 类型推导 /69
2.6 准备 /75
2.6.1 静态字段的准备 /76
2.6.2 非静态字段的准备 /77
2.6.3 虚方法表 /80
2.7 解析 /86
2.7.1 实例:类的解析 /86
2.7.2 类的解析 /88
2.7.3 字段的解析 /89
2.7.4 方法的解析 /91
2.7.5 接口方法的解析 /98
2.7.6 字符串常量的解析 /100
2.7.7 常量池其他表项的解析 /101
2.8 初始化 /101
2.8.1 类初始化方法 /102
2.8.2 类初始化算法 /103
2.9 类加载各阶段的执行顺序 /110
2.9.1 急切策略和惰性策略 /111
2.9.2 类解析和类初始化的耦合性 /113
2.10 自定义类加载器 /114
2.10.1 独立加载模型 /116
2.10.2 双亲委派模型 /118
2.11 实例:类加载器的典型应用 /123
2.11.1 动态代理 /124
2.11.2 热替换 /133
第 3 章 执行引擎 /139
3.1 栈帧结构 /139
3.2 调用规范 /140
3.3 执行引擎架构 /141
3.3.1 序列式架构 /142
3.3.2 跳转表架构 /143
3.4 执行引擎实现 /145
3.4.1 常量加载指令 /145
3.4.2 数据加载指令 /147
3.4.3 数据存储指令 /149
3.4.4 栈操作指令 /151
3.4.5 数学运算指令 /152
3.4.6 数值转换指令 /155
3.4.7 比较运算指令 /157
3.4.8 控制转移指令 /159
3.4.9 引用指令 /176
3.4.10 扩展与虚拟机保留指令 /185
3.5 本地方法执行引擎 /187
3.6 可重入方法 /194
3.7 汇编模板 /198
第 4 章 本地方法接口 /201
4.1 实例:Java 本地方法 /201
4.2 方法绑定 /202
4.2.1 本地方法的数据结构 /203
4.2.2 动态库加载 /205
4.2.3 动态绑定 /206
4.2.4 静态绑定 /209
4.3 本地方法拦截 /213
4.3.1 拦截机制 /213
4.3.2 耦合性 /216
4.3.3 反射 /217
4.4 本地方法回调 Java 方法 /218
4.4.1 JNI 回调函数 /220
4.4.2 本地方法栈帧 /223
第 5 章 异常处理 /226
5.1 实例:Java 异常处理 /226
5.2 异常栈 /228
5.3 异常表 /236
5.4 栈回滚 /243
5.5 本地方法异常 /247
5.6 其他问题 /250
5.6.1 隐式异常 /250
5.6.2 异常处理与多线程 /253
5.6.3 执行效率 /254
第 6 章 堆和垃圾收集 /255
6.1 实例:对象与垃圾 /255
6.1.1 语法垃圾与语义垃圾 /256
6.1.2 内存泄漏 /257
6.2 堆 /258
6.2.1 堆数据结构 /258
6.2.2 堆分配接口 /259
6.3 存储布局 /259
6.3.1 对象的存储布局 /259
6.3.2 类的存储布局 /263
6.3.3 数组的存储布局 /264
6.4 垃圾收集 /265
6.4.1 根节点 /266
6.4.2 复制收集 /270
6.4.3 终结 /276
6.4.4 垃圾收集的触发 /280
6.5 本地方法和垃圾收集 /281
6.5.1 局部和全局引用 /281
6.5.2 对象引用相关 JNI 函数的实现 /283
6.6 其他问题 /285
6.6.1 多线程与垃圾收集 /285
6.6.2 无中断垃圾收集 /289
6.6.3 类型标记 /291
第 7 章 多线程 /293
7.1 线程语义模型 /293
7.1.1 线程方法 /293
7.1.2 线程状态 /294
7.1.3 实例:线程中断 /297
7.2 管程 /303
7.2.1 管程数据结构 /303
7.2.2 接口与实现 /307
7.2.3 管程指令 /314
7.2.4 管程与对象 /316
7.3 多线程的实现 /318
7.3.1 线程数据结构 /319
7.3.2 创建线程对象 /321
7.3.3 启动 /323
7.3.4 让出 /325
7.3.5 睡眠 /325
7.3.6 中断 /327
7.3.7 停止、挂起和继续 /335
7.3.8 原子性和可见性 /337
7.3.9 线程与信号 /338
7.4 多线程与虚拟机其他子系统的交互 /342
7.4.1 全局数据结构与锁 /343
7.4.2 类初始化 /345
7.4.3 垃圾收集 /350
第 8 章 调试 /357
8.1 调试器架构 /357
8.1.1 客户端{服务器架构 /358
8.1.2 JDWP 调试协议 /359
8.1.3 数据类型 /360
8.1.4 实例:断点 /361
8.2 调试代理 /364
8.2.1 通信模块 /365
8.2.2 执行引擎模块 /366
8.2.3 对象管理模块 /370
8.2.4 事件处理模块 /371
8.3 实例:jdb 调试器 /376
8.4 调试的其他问题 /384
8.4.1 薛定谔困境 /384
第 1 章 虚拟机架构 /1
1.1 Java 与 Java 虚拟机 /1
1.1.1 设计背景 /1
1.1.2 Java 技术栈的组成要素 /2
1.1.3 Java 字节码 /3
1.2 Java 虚拟机架构 /5
1.3 实例:J 语言及其编译 /7
1.3.1 J 语言语法 /7
1.3.2 栈式计算机 /13
1.3.3 J 字节码 /17
1.3.4 J 语言编译到 J 字节码 /19
1.4 实例:J 虚拟机 /23
1.4.1 字节码加载子系统 /23
1.4.2 字节码验证器 /24
1.4.3 解释执行引擎 /27
第 2 章 类加载器 /30
2.1 实例:Java 的类加载 /30
2.2 类的二进制定义 /32
2.2.1 常量池 /34
2.2.2 接口 /36
2.2.3 字段 /37
2.2.4 方法 /37
2.2.5 属性 /38
2.3 方法区 /41
2.3.1 代码区 /41
2.3.2 运行时常量池 /45
2.3.3 类辅助数据结构 /47
2.4 类装载 /49
2.4.1 递归下降装载 /50
2.4.2 接口的装载 /57
2.4.3 数组的装载 /57
2.4.4 基本类的装载 /59
2.5 验证 /61
2.5.1 为什么要进行验证 /61
2.5.2 验证的目标 /63
2.5.3 实例:验证规则 /63
2.5.4 结构化约束 /68
2.5.5 类型推导 /69
2.6 准备 /75
2.6.1 静态字段的准备 /76
2.6.2 非静态字段的准备 /77
2.6.3 虚方法表 /80
2.7 解析 /86
2.7.1 实例:类的解析 /86
2.7.2 类的解析 /88
2.7.3 字段的解析 /89
2.7.4 方法的解析 /91
2.7.5 接口方法的解析 /98
2.7.6 字符串常量的解析 /100
2.7.7 常量池其他表项的解析 /101
2.8 初始化 /101
2.8.1 类初始化方法 /102
2.8.2 类初始化算法 /103
2.9 类加载各阶段的执行顺序 /110
2.9.1 急切策略和惰性策略 /111
2.9.2 类解析和类初始化的耦合性 /113
2.10 自定义类加载器 /114
2.10.1 独立加载模型 /116
2.10.2 双亲委派模型 /118
2.11 实例:类加载器的典型应用 /123
2.11.1 动态代理 /124
2.11.2 热替换 /133
第 3 章 执行引擎 /139
3.1 栈帧结构 /139
3.2 调用规范 /140
3.3 执行引擎架构 /141
3.3.1 序列式架构 /142
3.3.2 跳转表架构 /143
3.4 执行引擎实现 /145
3.4.1 常量加载指令 /145
3.4.2 数据加载指令 /147
3.4.3 数据存储指令 /149
3.4.4 栈操作指令 /151
3.4.5 数学运算指令 /152
3.4.6 数值转换指令 /155
3.4.7 比较运算指令 /157
3.4.8 控制转移指令 /159
3.4.9 引用指令 /176
3.4.10 扩展与虚拟机保留指令 /185
3.5 本地方法执行引擎 /187
3.6 可重入方法 /194
3.7 汇编模板 /198
第 4 章 本地方法接口 /201
4.1 实例:Java 本地方法 /201
4.2 方法绑定 /202
4.2.1 本地方法的数据结构 /203
4.2.2 动态库加载 /205
4.2.3 动态绑定 /206
4.2.4 静态绑定 /209
4.3 本地方法拦截 /213
4.3.1 拦截机制 /213
4.3.2 耦合性 /216
4.3.3 反射 /217
4.4 本地方法回调 Java 方法 /218
4.4.1 JNI 回调函数 /220
4.4.2 本地方法栈帧 /223
第 5 章 异常处理 /226
5.1 实例:Java 异常处理 /226
5.2 异常栈 /228
5.3 异常表 /236
5.4 栈回滚 /243
5.5 本地方法异常 /247
5.6 其他问题 /250
5.6.1 隐式异常 /250
5.6.2 异常处理与多线程 /253
5.6.3 执行效率 /254
第 6 章 堆和垃圾收集 /255
6.1 实例:对象与垃圾 /255
6.1.1 语法垃圾与语义垃圾 /256
6.1.2 内存泄漏 /257
6.2 堆 /258
6.2.1 堆数据结构 /258
6.2.2 堆分配接口 /259
6.3 存储布局 /259
6.3.1 对象的存储布局 /259
6.3.2 类的存储布局 /263
6.3.3 数组的存储布局 /264
6.4 垃圾收集 /265
6.4.1 根节点 /266
6.4.2 复制收集 /270
6.4.3 终结 /276
6.4.4 垃圾收集的触发 /280
6.5 本地方法和垃圾收集 /281
6.5.1 局部和全局引用 /281
6.5.2 对象引用相关 JNI 函数的实现 /283
6.6 其他问题 /285
6.6.1 多线程与垃圾收集 /285
6.6.2 无中断垃圾收集 /289
6.6.3 类型标记 /291
第 7 章 多线程 /293
7.1 线程语义模型 /293
7.1.1 线程方法 /293
7.1.2 线程状态 /294
7.1.3 实例:线程中断 /297
7.2 管程 /303
7.2.1 管程数据结构 /303
7.2.2 接口与实现 /307
7.2.3 管程指令 /314
7.2.4 管程与对象 /316
7.3 多线程的实现 /318
7.3.1 线程数据结构 /319
7.3.2 创建线程对象 /321
7.3.3 启动 /323
7.3.4 让出 /325
7.3.5 睡眠 /325
7.3.6 中断 /327
7.3.7 停止、挂起和继续 /335
7.3.8 原子性和可见性 /337
7.3.9 线程与信号 /338
7.4 多线程与虚拟机其他子系统的交互 /342
7.4.1 全局数据结构与锁 /343
7.4.2 类初始化 /345
7.4.3 垃圾收集 /350
第 8 章 调试 /357
8.1 调试器架构 /357
8.1.1 客户端{服务器架构 /358
8.1.2 JDWP 调试协议 /359
8.1.3 数据类型 /360
8.1.4 实例:断点 /361
8.2 调试代理 /364
8.2.1 通信模块 /365
8.2.2 执行引擎模块 /366
8.2.3 对象管理模块 /370
8.2.4 事件处理模块 /371
8.3 实例:jdb 调试器 /376
8.4 调试的其他问题 /384
8.4.1 薛定谔困境 /384
猜您喜欢