《深入Java虚拟机》PDF下载

  • 购买积分:15 如何计算积分?
  • 作  者:(美)Bill Venners著;曹晓钢,蒋靖译
  • 出 版 社:北京:机械工业出版社
  • 出版年份:2003
  • ISBN:7111128052
  • 页数:461 页
图书介绍:本书深入揭示了Java虚拟机的内部工作原理。

第1章 Java 体系结构介绍 1

1.1 为什么使用 Java 1

1.2 网络带来的挑战和机遇 1

1.3 体系结构 2

1.3.1 Java 虚拟机 2

1.3.2 类装载器的体系结构 4

1.3.3 Java class 文件 7

1.3.4 Java API 7

1.3.5 Java 程序设计语言 8

1.4 Java 体系结构的代价 10

1.5 结论 13

1.6 资源页 13

第2章 平台无关 15

2.1 为什么要平台无关 15

2.2 Java 的体系结构对平台无关的支持 16

2.2.1 Java 平台 16

2.2.2 Java 语言 16

2.3.3 Java class 文件 16

2.2.4 可伸缩性 16

2.3 影响平台无关性的因素 18

2.3.1 Java 平台的部署 18

2.3.2 Java 平台的版本 18

2.3.3 本地方法 19

2.3.4 非标准运行时库 20

2.3.5 对虚拟机的依赖 20

2.3.6 对用户界面的依赖 21

2.3.7 Java 平台实现中的 bug 21

2.3.8 测试 21

2.4 平台无关的七个步骤 21

2.5 平台无关性的策略 22

2.6 平台无关性和网络移动对象 24

2.7 资源页 24

第3章 安全 25

3.1 为什么需要安全性 25

3.2 基本沙箱 26

3.3 类装载器体系结构 27

3.4 class 文件检验器 31

3.4.1 第一趟:class 文件的结构检查 32

3.4.2 第二趟:类型数据的语义检查 33

3.4.3 第三趟:字节码验证 33

3.4.4 第四趟:符号引用的验证 34

3.4.5 二进制兼容 35

3.5 Java 虚拟机中内置的安全特性 36

3.6 安全管理器和 Java API 38

3.7 代码签名和认证 41

3.8 一个代码签名示例 45

3.9 策略 49

3.10 保护域 52

3.11 访问控制器 54

3.11.1 implies()方法 54

3.11.2 栈检查示例 56

3.11.3 一个回答“是”的栈检查 59

3.11.4 一个回答“不”的栈检查 62

3.11.5 doPrivileged()方法 64

3.11.6 doPrivileged()的一个无效使用 68

3.12 Java 安全模型的不足和今后的发展方向 71

3.13 和体系结构无关的安全性 71

3.14 资源页 72

第4章 网络移动性 73

4.1 为什么需要网络移动性 73

4.2 一种新的软件模式 74

4.3 Java 体系结构对网络移动性的支持 76

4.4 applet:网络移动性代码的示例 78

4.5 Jini 服务对象:网络移动对象的示例 79

4.5.1 Jini 是什么 80

4.5.2 Jini 如何工作 80

4.5.3 服务对象的优点 81

4.6 网络移动性:Java 设计的中心 83

4.7 资源页 83

第5章 Java 虚拟机 85

5.1 Java 虚拟机是什么 85

5.2 Java 虚拟机的生命周期 85

5.3 Java 虚拟机的体系结构 86

5.3.1 数据类型 89

5.3.2 字长的考量 90

5.3.3 类装载器子系统 90

5.3.4 方法区 92

5.3.5 堆 97

5.3.6 程序计数器 102

5.3.7 Java 栈 102

5.3.8 栈帧 103

5.3.9 本地方法栈 109

5.3.10 执行引擎 110

5.3.11 本地方法接口 117

5.4 真实机器 118

5.5 一个模拟:“Eternal Math” 119

5.6 随书光盘 119

5.7 资源页 120

第6章 Java class 文件 121

6.1 Java class 文件是什么 121

6.2 class 文件的内容 122

6.3 特殊字符串 127

6.3.1 全限定名 127

6.3.2 简单名称 127

6.3.3 描述符 127

6.4 常量池 129

6.4.1 CONSTANT_Utf8_info 表 129

6.4.2 CONSTANT_Integer_info 表 131

6.4.3 CONSTANT_Float_info 表 131

6.4.4 CONSTANT_Long_info 表 132

6.4.5 CONSTANT_Double_info 表 132

6.4.6 CONSTANT_Class_info 表 132

6.4.7 CONSTANT_String_info 表 133

6.4.8 CONSTANT_Fieldref_info 表 133

6.4.9 CONSTANT_Methodref_info 表 134

6.4.10 CONSTANT_InterfaceMethodref_info 表 135

6.4.11 CONSTANT_NameAndType_info 表 135

6.5 字段 136

6.6 方法 137

6.7 属性 138

6.7.1 属性格式 139

6.7.2 Code 属性 140

6.7.3 ConstantValue 属性 142

6.7.4 Deprecated 属性 142

6.7.5 Exceptions 属性 143

6.7.6 InnerClasses 属性 144

6.7.7 LineNumberTable 属性 146

6.7.8 LocalVariableTable 属性 147

6.7.9 SourceFile 属性 148

6.7.10 Synthetic 属性 149

6.8 一个模拟:“Getting Loaded” 149

6.9 随书光盘 151

6.10 资源页 151

第7章 类型的生命周期 153

7.1 类型装载、连接与初始化 153

7.1.1 装载 154

7.1.2 验证 155

7.1.3 准备 157

7.1.4 解析 157

7.1.5 初始化 157

7.2 对象的生命周期 164

7.2.1 类实例化 164

7.2.2 垃圾收集和对象的终结 174

7.3 卸载类型 174

7.4 随书光盘 176

7.5 资源页 176

第8章 连接模型 177

8.1 动态连接和解析 177

8.1.1 解析和动态扩展 178

8.1.2 类装载器与双亲委派模型 180

8.1.3 常量池解析 181

8.1.4 解析 CONSTANT_Class_info 入口 182

8.1.5 解析 CONSTANT_Fieldref_info 入口 187

8.1.6 解析 CONSTANT_Methodref_info 入口 188

8.1.7 解析 CONSTANT_Interface_Methodref_info 入口 188

8.1.8 解析 CONSTANT_String_info 入口 189

8.1.9 解析其他类型的入口 190

8.1.10 装载约束 191

8.1.11 编译时常量解析 192

8.1.12 直接引用 193

8.1.13 _quick 指令 199

8.1.14 示例:Salutation 程序的连接 200

8.1.15 示例:Greet 程序的动态扩展 209

8.1.16 使用1.1版本的用户自定义类装载器 213

8.1.17 使用1.2版本的用户自定义类装载器 218

8.1.18 示例:使用 forName()的动态扩展 221

8.1.19 示例:卸载无法触及的 greeter 类 224

8.1.20 示例:类型安全性与装载约束 229

8.2 随书光盘 237

8.3 资源页 237

第9章 垃圾收集 239

9.1 为什么要使用垃圾收集 239

9.2 垃圾收集算法 240

9.3 引用计数收集器 240

9.4 跟踪收集器 241

9.5 压缩收集器 241

9.6 拷贝收集器 241

9.7 按代收集的收集器 242

9.8 自适应收集器 243

9.9 火车算法 243

9.9.1 车厢、火车和火车站 244

9.9.2 车厢收集 245

9.9.3 记忆集合和流行对象 246

9.10 终结 246

9.11 对象可触及性的生命周期 247

9.11.1 引用对象 248

9.11.2 可触及性状态的变化 249

9.11.3 缓存、规范映射和临终清理 251

9.12 一个模拟:“Heap of Fish” 252

9.12.1 分配鱼 253

9.12.2 设置引用 254

9.12.3 垃圾收集 255

9.12.4 压缩堆 256

9.13 随书光盘 257

9.14 资源页 257

第10章 栈和局部变量操作 259

10.1 常量入栈操作 259

10.2 通用栈操作 261

10.3 把局部变量压入栈 262

10.4 弹出栈顶部元素,将其赋给局部变量 263

10.5 wide 指令 264

10.6 一个模拟:“Fibonacci Forever” 265

10.7 随书光盘 267

10.8 资源页 267

第11章 类型转换 269

11.1 转换操作码 269

11.2 一个模拟:“Conversion Diversion” 271

11.3 随书光盘 273

11.4 资源页 274

第12章 整数运算 275

12.1 二进制补码运算 275

12.2 Inner Int:揭示 Java int 类型内部性质的 applet 276

12.3 运算操作码 276

12.4 一个模拟:“Prime Time” 278

12.5 随书光盘 282

12.6 资源页 282

第13章 逻辑运算 283

13.1 逻辑操作码 283

13.2 一个模拟:“Logical Results” 284

13.3 随书光盘 286

13.4 资源页 286

第14章 浮点运算 287

14.1 浮点数 287

14.2 Inner Float:揭示 Java float 类型内部性质的 applet 289

14.3 浮点模式 290

14.3.1 浮点值集合 291

14.3.2 浮点值集的转换 291

14.3.3 相关规则的本质 291

14.4 浮点操作码 292

14.5 一个模拟:“Circle of Squares” 293

14.6 随书光盘 295

14.7 资源页 295

第15章 对象和数组 297

15.1 关于对象和数组的回顾 297

15.2 针对对象的操作码 297

15.3 针对数组的操作码 299

15.4 一个模拟:“Three-Dimensional Array” 301

15.5 随书光盘 304

15.6 资源页 304

第16章 控制流 305

16.1 条件分支 305

16.2 无条件分支 307

16.3 使用表的条件分支 308

16.4 一个模拟:“Saying Tomato” 309

16.5 随书光盘 311

16.6 资源页 311

第17章 异常 313

17.1 异常的抛出与捕获 313

17.2 异常表 317

17.3 一个模拟:“Play Ball!” 318

17.4 随书光盘 320

17.5 资源页 320

第18章 finally 子句 321

18.1 微型子例程 321

18.2 不对称的调用和返回 322

18.3 一个模拟:“Hop Around” 324

18.4 随书光盘 328

18.5 资源页 328

第19章 方法的调用与返回 329

19.1 方法调用 329

19.1.1 Java 方法的调用 330

19.1.2 本地方法的调用 330

19.2 方法调用的其他形式 330

19.3 指令 invokespecial 331

19.3.1 指令 invokespecial 和<init>()方法 331

19.3.2 指令 invokespecial 和私有方法 333

19.3.3 指令 invokespecial 和 super 关键字 334

19.4 指令 invokeinterface 335

19.5 指令的调用和速度 336

19.6 方法调用的实例 336

19.7 从方法中返回 341

19.8 随书光盘 341

19.9 资源页 341

第20章 线程同步 343

20.1 监视器 343

20.2 对象锁 346

20.3 指令集中对同步的支持 347

20.3.1 同步语句 347

20.3.2 同步方法 350

20.4 Object 类中的协调支持 353

20.5 随书光盘 353

20.6 资源页 353

附录 A 按操作码助记符排列的指令集 355

附录 B 按功能排列的操作码助记符 437

附录 C 按操作码字节值排列的操作码助记符 445

附录 D Java 虚拟机的一个模拟:“Slices of pi” 453