第一章 Java体系结构介绍 9
1.1一个对象的类可以是一下情形之一 91.3 java体系结构包括四大独立但相关的技术: 9
1.3.1 Java虚拟机 9
1.3.2 类装载器的体系结构 12
1.3.3 Java class文件 15
1.3.4 Java API 16
1.3.5 Java程序设计语言 17
1.4 Java体系结构的代价 17
第二章 平台无关 19
2.2 Java的体系结构对平台无关的支持 19
2.2.1 Java平台 19
2.2.2 Java语言 19
2.2.3 Java class文件 19
2.2.4 可伸缩性 19
2.3 影响平台无关的因素 19
2.3.1 Java平台的部署 19
2.3.3 本地方法 20
2.3.5 对虚拟机的依赖 20
2.4 平台无关的七个步骤 21
第三章 安全 23
3.1 为什么需要安全性 23
3.2 基本沙箱 23
3.3 类装载器体系结构 24
3.4 Class文件检验器 28
3.4.1 第一趟:class文件的结构检查 29
3.4.2 第二趟:类型数据的语义检查 29
3.3.3 第三趟:字节码验证 30
3.4.4 第四趟:符号引用的验证 32
3.4.5 二进制兼容(编译时) 34
3.5 Java虚拟机中内置的安全特性 37
3.6安全管理器和Java API 38
3.7 代码签名和认证 40
3.8 一个代码签名示例 42
3.9 策略 43
3.10 保护域 45
3.11 访问控制器 47
3.12 Java安全模型的不足和今后的发展方向 48
第四章 网络移动性 49
4.1为什么需要网络移动性 49
4.2 一种新的软件模式 49
4.3 Java体系结构对网络移动性的支持 50
4.4 动态扩展 51
4.5 Jini服务对象:网络移动对象的示例 52
第五章 Java虚拟机 53
5.2 Java虚拟机的声明周期 53
5.3 Java虚拟机的体系结构 54
5.3.1 数据类型 57
5.3.2 字长的考量 58
5.3.3 类装载器子系统 59
深入类装载器(附加,帮助理解) 62
5.3.4 方法区 87
方法区装载内容(class字节码信息) 88
5.3.5 堆 94
5.3.6 程序计数器 101
5.3.7 Java栈 101
5.3.8 栈帧 102
5.3.9 本地方法栈 108
5.3.10 执行引擎 110
5.3.11 本地方法接口 115
5.3.12 真实机器 116
第六章 Java class文件 117
6.1 Java class文件是什么 117
6.2 class文件的内容 119
6.2.1 魔数 119
6.2.2 版本号 120
6.2.3 常量池 121
6.2.4 访问标志 124
6.2.5 类索引 125
6.2.6 父类索引 125
6.2.7 interfaces_count和interfaces 126
6.2.8 fields_count和fields 126
6.2.9 method_count和methods 128
6.2.10 attributes_count和attributes 129
6.3 特殊字符串(常量池) 130
6.4 常量池 132
6.4.1 CONSTANT_Utf8_info表 132
6.4.2 CONSTANT_Integer_info表 133
6.4.3 CONSTANT_Float_info表 133
6.4.4 CONSTANT_Long_info表 133
6.4.5 CONSTANT_Double_info表 133
6.4.6 CONSTANT_Class_info表 133
6.4.7 CONSTANT_String_info表 134
6.4.8 CONSTANT_Fieldref_info表 134
6.4.9 CONSTANT_Methodref_info表 135
6.4.10 CONSTANT_InterfaceMethodref_info表 136
6.4.11 CONSTANT_NameAndType_info表 136
6.5 字段 137
6.6 方法 138
6.7 属性 140
6.7.1 属性格式 141
6.7.2 Code属性 142
6.7.3 ConstantValue属性 145
6.7.4 Deprecated属性 145
6.7.5 Exception属性 146
6.7.6 InnerClasses属性 146
6.6.7 LineNumberTable属性 147
6.6.8 LocalVariableTable属性 148
6.6.9 SourceFile属性 148
6.6.10 Synthetic属性 148
6.8 class字节码分析实例 149
6.8.1 一个解析Java Class文件的实例 149
6.8.2 class文件分析 149
第七章 类型的声明周期 150
7.1 类型装载、连接与初始化 150
7.1.1 装载 152
7.1.2 验证 153
7.1.3 准备 156
7.1.4 解析 157
7.1.5 初始化(类变量) 157
7.2 对象的声明周期 160
7.2.1 类实例化 160
Java初始化的顺序如下: 163
7.2.2 垃圾收集和对象的终结 163
7.3 卸载类型(是卸载类而非对象) 163
第八章 连接模型 166
8.1 动态连接和解析 166
8.1.1 解析和动态扩展 167
8.1.2 类装载器与双亲委派模型 172
8.1.3 常量池解析 176
8.1.4 解析CONSTANT_Class_info入口 176
8.1.5 解析CONSTANT_Fieldref_info入口 178
8.1.6 解析CONSTANT_Methodref_info入口 179
8.1.7 解析CONSTANT_InterfaceMethodref_info入口 180
8.1.8 解析CONSTANT_String_info入口 180
8.1.9 解析其他类型的入口 181
8.1.10 装载约束 181
8.1.11 编译时常量解析 182
8.1.12 直接引用 183
8.1.13 _quick指令 184
8.1.14 示例:Salutation程序的连接 185
8.1.15 示例:Geet程序的动态扩展 192
8.1.16 使用1.1版本的用户自定义类装载器 192
8.1.17 使用1.2版本的用户自定义装载器 194
8.1.18 示例:使用forName()的动态扩展 196
8.1.19 示例:卸载无法触及的greeter类 197
8.1.20 示例:类型安全性与装载约束 197
第九章 垃圾收集 198
9.1 为什么要使用垃圾收集 198
9.2 垃圾收集算法 199
9.3 引用计数收集器 200
9.4 跟踪收集器 200
9.5 压缩收集器 201
9.6 拷贝收集器 201
9.7 按代收集的收集器 202
9.8 自适应收集器 203
总结 203
9.9 火车算法 205
帮助理解的火车算法 207
9.9.3 记忆集合和流行对象 209
9.10 终结 210
9.11 对象可触及性的生命周期 211
第十章 栈和局部变量操作 217
10.1 常量入栈指令 218
10.2 局部变量值转载到栈中指令 219
10.3 将栈顶值保存到局部变量中指令 220
10.4 wide指令 222
10.5 通用(无类型)栈操作指令 223
例1 225
例2 226
例3 227
第十一章 类型转换 228
11.1类型转换指令 228
例子1 229
例子2 229
第十二章 整数运算 231
java 原码、反码、补码 231
Java中的数值数据、原码、反码、补码、数据类型及范围、字面量 232
12.1 整数运算 233
例1 235
第十三章 逻辑运算 237
逻辑运算——移位运算 237
逻辑运算——按位布尔运算 237
例1 238
第十四章 浮点运算 240
14.1 Java虚拟机支持Java语言的基本数据类型如下: 240
14.2 浮点运算 241
第十五章 对象和数组 243
15.1 关于对象和数组的回顾 243
15.2 对象操作指令 243
15.3 数组操作指令 244
例1 247
第十六章 控制流 249
16.1 控制流指令——条件跳转指令 249
16.2 控制流指令——比较指令 250
16.3 对象引用之间与null之间的比较 251
16.4 控制流指令——无条件跳转指令 251
16.5 控制流指令——表跳转指令(专门为switch设计) 252
例1 253
第十七章 异常 255
控制流指令——异常和finally 255
例1 255
第十八章 finally子句 257
18.1 微型子例程 257
18.2 不对称的调用和返回 258
例1 259
第十九章 方法的调用与返回 261
19.1 方法调用 261
方法调用指令 261
19.2 方法调用的其他形式 262
19.3 指令invokespecial 262
19.3.1 指令invokespecial和<init>()方法 262
19.3.2 指令invokespecial和私有方法。 265
19.3.3 指令invokespecial和私有方法。 267
19.4 指令invokeinterface 269
19.7 方法返回指令 269
第二十章 线程同步 270
线程同步指令 270
推荐文章 271