[套装书]深入剖析Java虚拟机:源码剖析与实例详解(基础卷)+深入解析Java编译器:源码剖析与实例详解(2册)

作者
马智
丛书名
出版社
机械工业出版社
ISBN
9782108271104
简要
简介
内容简介书籍计算机书籍 ---------------------------8083450 - 深入剖析Java虚拟机:源码剖析与实例详解(基础卷)--------------------------- 本书以工业级虚拟机HotSpot的源代码分析为基础,详细介绍了对象的二分模型、类的加载机制、类及常量池的解析、方法及变量解析、对象的创建和初始化、Serial和Serial Old垃圾收集器、Java引用类型等的实现原理,同时对重点源代码的实现进行了详细解读,让读者真正掌握HotSpot虚拟机运行的每个细节。本书共13章,章节的前后顺序基本都是按类的生命周期进行介绍。本书对于HotSpot VM的基础功能模块进行了源码剖析,力求交待清楚每个重要知识点的实现细节和背后的运行原理,同时还会用大量的实例和配图帮助读者更好的理解。 ---------------------------8066107 - 深入解析Java编译器:源码剖析与实例详解--------------------------- 本书针对Java语言的编译器源码进行深度剖析,所以本书面向的读者主要是那些想深入研究Java语言运行原理的人。另外本书还可以用作编译原理的学习,通过强实践来达到学习的目的,所以对于想学习编译原理的人,如软件专业的学生,也是一个很好的选择。 本书共18章,5个附录,涵盖-Javac文件系统、词法分析、语法分析、符号表、语义分析、泛型、数据流、语法糖、字节码、Class文件等大量内容。由于Java编译器有10万行以上的代码,并且逻辑周密,细节众多。为了能够让读者更好的理解其中的要点,本书将会有大量的配图和实例,并且要对重点源代码展开细致的讲解。
目录
[套装书具体书目]
8066107 - 深入解析Java编译器:源码剖析与实例详解 - 9787111643388 - 机械工业出版社 - 定价 179
8083450 - 深入剖析Java虚拟机:源码剖析与实例详解(基础卷) - 9787111689898 - 机械工业出版社 - 定价 149



---------------------------8083450 - 深入剖析Java虚拟机:源码剖析与实例详解(基础卷)---------------------------


前言
第1章 认识HotSpot VM 1
1.1 初识JVM 1
1.2 编译OpenJDK 8 3
1.2.1 准备编译环境 3
1.2.2 下载源代码 3
1.2.3 编译源代码 4
1.2.4 通过GDB调试源代码 6
1.2.5 通过Eclipse调试源代码 7
1.3 HotSpot VM源代码结构 9
1.4 启动HotSpot VM 11
第2章 二分模型 17
2.1 Java类的表示——Klass 17
2.1.1 Klass类 18
2.1.2 InstanceKlass类 26
2.1.3 InstanceKlass类的子类 29
2.1.4 ArrayKlass类 34
2.1.5 TypeArrayKlass类 35
2.1.6 ObjArrayKlass类 40
2.2 Java对象的表示——oop 46
2.2.1 oopDesc类 46
2.2.2 markOopDesc类 48
2.2.3 instanceOopDesc类 49
2.2.4 arrayOopDesc类 51
2.2.5 arrayOopDesc类的子类 51
2.3 操作句柄——Handle 54
2.3.1 句柄Handle的定义与创建 55
2.3.2 句柄Handle的释放 57
第3章 类的加载 62
3.1 类加载器 62
3.1.1 引导类加载器/启动类加载器 62
3.1.2 扩展类加载器 64
3.1.3 应用类加载器/系统类加载器 65
3.1.4 构造类加载器实例 65
3.1.5 类的双亲委派机制 68
3.2 预加载类 83
3.2.1 核心类的预加载 83
3.2.2 数组的预加载 87
3.3 Java主类的装载 88
3.4 触发类的装载 94
第4章 类与常量池的解析 97
4.1 类的解析 97
4.1.1 Class文件格式 97
4.1.2 ClassFileParser类简介 98
4.1.3 ClassFileStream类简介 99
4.1.4 解析类文件 102
4.1.5 保存解析结果 109
4.2 常量池的解析 116
4.2.1 ConstantPool类 117
4.2.2 创建ConstantPool实例 117
4.2.3 解析常量池项 122
第5章 字段的解析 136
5.1 字段的解析基础 136
5.1.1 FieldAllocationCount与FieldAllocationType类 136
5.1.2 为字段分配内存空间 139
5.1.3 获取字段信息 141
5.2 伪共享 145
5.3 字段的内存布局 148
5.3.1 静态字段内存块的偏移量 148
5.3.2 非静态字段内存块的偏移量 149
5.3.3 计算每个字段的偏移量 154
5.3.4 @Contended字段的偏移量 156
5.4 字段的注入 158
5.5 对象类型字段的遍历 165
第6章 方法的解析 174
6.1 Method与ConstMethod类 174
6.1.1 Method类 174
6.1.2 ConstMethod类 177
6.2 调用parse_methods()函数解析方法 178
6.2.1 创建Method与ConstMethod实例 182
6.2.2 保存方法解析信息 187
6.3 klassVtable虚函数表 187
6.3.1 klassVtable类 188
6.3.2 计算vtable的大小 189
6.3.3 vtable的初始化 200
6.4 klassItable虚函数表 209
6.4.1 klassItable类 209
6.4.2 计算itable的大小 211
6.4.3 itable的初始化 213
第7章 类的连接与初始化 220
7.1 类的连接 220
7.2 类的验证 224
7.3 类的重写 227
7.3.1 生成常量池缓存项索引 228
7.3.2 重写字节码指令 234
7.3.3 创建常量池缓存 238
7.4 方法的连接 244
7.5 类的初始化 246
第8章 运行时数据区 250
8.1 HotSpot VM的内存划分 250
8.2 元空间 252
8.2.1 元空间的数据结构 253
8.2.2 内存块的管理 256
8.2.3 内存分配 258
8.2.4 内存回收 262
8.3 堆空间 267
8.3.1 CollectedHeap、Generation与Space类 268
8.3.2 Java堆的回收策略 277
8.3.3 Java堆的初始化 288
第9章 类对象的创建 299
9.1 对象的创建 299
9.2 对象的内存分配 311
9.2.1 在TLAB中分配内存 311
9.2.2 在堆中分配内存 322
9.2.3 添加对象偏移表记录 335
第10章 垃圾回收 344
10.1 分代垃圾回收 344
10.1.1 Serial和Serial Old垃圾收集器 344
10.1.2 复制算法和“标记-整理”算法 346
10.1.3 卡表 352
10.2 垃圾回收线程 358
10.3 安全点 370
10.3.1 关于安全点 370
10.3.2 阻塞线程和状态切换线程进入安全点 376
10.3.3 解释线程进入安全点 379
10.3.4 编译线程进入安全点 383
10.3.5 执行本地代码线程进入安全点 385
第11章 Serial垃圾收集器 388
11.1 触发YGC 388
11.2 年轻代的垃圾回收 389
11.3 标记普通的根对象 403
11.4 标记老年代引用的对象 415
11.5 递归标记活跃对象并复制 422
第12章 Serial Old垃圾收集器 428
12.1 触发FGC 428
12.2 标记活跃对象 431
12.3 计算活跃对象的地址 440
12.4 更新对象的引用地址 451
12.5 移动所有活跃对象 457
12.6 更新偏移表与卡表 460
第13章 Java引用类型 463
13.1 Java引用类型简介 463
13.2 查找引用类型 469
13.3 软引用 481
13.4 弱引用 490
13.5 虚引用 492
13.6 最终引用 495



---------------------------8066107 - 深入解析Java编译器:源码剖析与实例详解---------------------------


前言
第1章 Javac介绍 1
1.1 初识Javac 1
1.2 Javac源码与调试 4
1.3 Javac命令 7
第2章 Javac文件系统 12
2.1 文件相关实现类 12
2.2 文件的管理 25
2.2.1 获取JavacFileManager对象 25
2.2.2 StandardLocation类 28
2.2.3 JavacFileManager类 31
第3章 词法分析 38
3.1 字符编码 38
3.2 获取字符输入流 40
3.3 Token与Name 43
3.3.1 Token介绍 44
3.3.2 Name对象的生成与存储 47
3.3.3 Name映射为Token 51
3.4 生成Token流 52
第4章 语法分析之认识树节点 67
4.1 定义及声明 68
4.1.1 JCCompilationUnit类 68
4.1.2 JCImport类 69
4.1.3 JCClassDecl类 70
4.1.4 JCModifiers类 71
4.1.5 JCTypeParameter类 72
4.1.6 JCVariableDecl类 72
4.1.7 JCMethodDecl类 74
4.2 语句 75
4.2.1 JCBlock类 75
4.2.2 JCIf类 76
4.2.3 JCWhileLoop、JCDoWhileLoop、JCForLoop与JCEnhancedForLoop类 78
4.2.4 JCSwitch与JCCase类 79
4.2.5 JCTry、JCCatch与JCThrow类 81
4.2.6 JCLabeledStatement、JCReturn、JCContinue与JCBreak类 82
4.2.7 JCSynchronized类 83
4.2.8 JCAssert类 83
4.3 表达式 83
4.3.1 基本表达式 84
4.3.2 含运算符的表达式 88
4.3.3 类型相关表达式 94
4.3.4 注解表达式 97
4.4 生成树节点 98
第5章 语法分析之建立抽象语法树 101
5.1 定义及声明的抽象语法树 101
5.2 语句的抽象语法树 112
5.3 表达式的抽象语法树 121
5.3.1 基本表达式 122
5.3.2 含有运算符的表达式 134
5.4 遍历抽象语法树 140
第6章 符号表的组织 143
6.1 符号的定义 143
6.1.1 Symbol类 144
6.1.2 TypeSymbol及其子类 150
6.1.3 VarSymbol类 154
6.1.4 MethodSymbol及OperatorSymbol类 154
6.2 符号表的组织 160
6.2.1 Env类介绍 160
6.2.2 AttrContext类介绍 162
6.2.3 Scope类介绍 163
6.2.4 符号表的建立 164
6.3 类型的定义 169
6.3.1 普通类型的定义 169
6.3.2 泛型相关类型的定义 175
第7章 填充符号表 180
7.1 依赖的处理 180
7.1.1 创建包或类符号 180
7.1.2 输入包或类下的成员符号 184
7.2 符号输入的第一阶段 189
7.2.1 Enter类 190
7.2.2 visitTopLevel()方法 192
7.2.3 visitClassDef()方法 193
7.2.4 visitTypeParameter()方法 196
7.3 符号输入第二阶段 197
7.3.1 MemberEnter类 197
7.3.2 visitImport()方法 200
7.3.3 visitMethodDef()方法 207
7.3.4 visitVarDef()方法 209
第8章 插入式注解的实现 211
8.1 注解处理器基础 211
8.1.1 编写注解处理器 211
8.1.2 注解配置 215
8.1.3 工具类 215
8.2 初始化注解处理器 222
8.3 运行注解处理器 226
第9章 语义分析之类型转换 233
9.1 类型转换的种类 233
9.2 赋值转换 245
9.3 方法调用转换 253
9.4 强制类型转换 254
9.5 数字提升 266
第10章 语义分析之语法检查 269
10.1 类型定义的检查 269
10.1.1 父类及实现接口的检查 269
10.1.2 类型定义的唯一性检查 273
10.1.3 类型中方法的兼容性检查 276
10.1.4 类型中实现方法的检查 287
10.2 变量定义的检查 294
10.3 方法定义的检查 296
10.3.1 方法的唯一性检查 296
10.3.2 方法的隐藏 298
10.3.3 方法的覆写 303
第11章 语义分析之引用消解 307
11.1 Resolve类介绍 307
11.2 类型引用的消解 310
11.3 变量引用的消解 320
11.4 方法引用的消解 323
第12章 语义分析之语法树标注 345
12.1 Attr类介绍 346
12.2 表达式相关树节点的标注 348
12.2.1 JCUnary树节点标注 348
12.2.2 JCBinary树节点的标注 350
12.2.3 JCAssignOp树节点的标注 351
12.3 JCIdent树节点的标注 351
12.4 JCFieldAccess树节点的标注 354
第13章 泛型的实现 361
13.1 泛型类型 361
13.2 泛型方法 364
13.2.1 类型推断 365
13.2.2 钻石语法 383
13.3 泛型擦除 386
第14章 数据流检查 396
14.1 Flow类介绍 396
14.1.1 语句的活跃性分析 396
14.1.2 变量赋值检查 398
14.1.3 异常检查 405
14.2 if语句的分析 405
14.2.1 if语句 405
14.2.2 一元表达式与if语句 409
14.2.3 二元表达式与if语句 410
14.2.4 三元表达式与if语句 412
14.3 循环语句的分析 413
14.3.1 for语句 413
14.3.2 中断循环语句 416
14.4 try语句与throw语句的分析 419
14.4.1 抛出异常 419
14.4.2 异常检查 424
14.4.3 变量赋值状态及语句的活跃性 430
第15章 语法糖去除 435
15.1 简单语法糖 436
15.1.1 变长参数 436
15.1.2 条件编译 437
15.1.3 自动装箱与拆箱 438
15.2 语句语法糖 440
15.2.1 foreach语句 440
15.2.2 switch语句 442
15.2.3 try-with-resources语句 447
15.3 枚举类语法糖 452
15.4 内部类语法糖 453
15.4.1 调用私有构造方法 454
15.4.2 引用成员 457
15.4.3 super关键字引用父类成员 470
15.4.4 访问自由变量 472
第16章 字节码指令生成 486
16.1 字节码指令集 486
16.2 生成字节码指令 492
16.2.1 实现本地变量表 492
16.2.2 实现操作数栈 495
16.2.3 常量池信息的存储 497
16.2.4 Code类介绍 499
16.3 Gen类介绍 502
16.4 可寻址实体Item 506
16.4.1 LocalItem类 508
16.4.2 ImmediateItem类 512
16.4.3 StackItem类 514
16.4.4 AssignItem类 515
16.4.5 StaticItem类 517
16.4.6 MemberItem类 520
16.4.7 SelfItem类 523
16.4.8 IndexedItem类 524
第17章 重要结构的字节码指令生成 527
17.1 控制转移指令与地址回填 527
17.1.1 认识控制转移指令 527
17.1.2 地址回填 529
17.2 语句的条件判断表达式 530
17.2.1 CondItem类 530
17.2.2 一元与二元条件判断表达式 533
17.2.3 三元条件判断表达式 534
17.3 if语句 536
17.4 循环语句 537
17.5 switch语句 539
17.6 异常与finally语句 545
17.6.1 异常的抛出 545
17.6.2 异常的捕获与finally语句 545
第18章 生成Class文件 553
18.1 Class文件的结构 553
18.2 魔数与版本 556
18.3 常量池 556
18.4 类定义的基本信息 562
18.4.1 访问标识符 562
18.4.2 类、父类及接口集合 564
18.5 字段集合 565
18.6 方法集合 570
18.7 类属性集合 575
18.8 描述符和签名 581
18.8.1 描述符 581
18.8.2 签名 582
18.8.3 描述符与签名的实现 585
附录A Javac命令 589
附录B 文法 592
附录C 类型常见操作 600
C.1 supertype()方法 600
C.2 interfaces()方法 604
C.3 asSuper()方法 606
C.4 asOuterSuper()方法 608
C.5 isSameType()方法 609
C.6 L()与U()方法 615
C.7 lowerBound()与upperBound()方法 616
C.8 containsType()方法 617
C.9 hasSameArgs()方法 621
C.10 subst()方法 623
C.11 memberType()方法 626
C.12 erasure()与erasureRecursive()方法 628
附录D 符号常见操作 632
D.1 isInheritedIn()方法 632
D.2 hiddenIn()方法 633
D.3 isMemberOf()方法 634
D.4 overrides()方法 635
D.5 implementation()方法 639
附录E 虚拟机字节码指令表 645
E.1 加载与存储指令 645
E.2 运算指令 648
E.3 类型转换指令 650
E.4 对象操作指令 651
E.5 操作数栈管理指令 652
E.6 控制转移指令 652
E.7 方法调用和返回指令 653
E.8 异常抛出指令 654
E.9 同步指令 654

推荐

车牌查询
桂ICP备20004708号-3