重磅推荐
【前言】
  Preface 前 言本书涵盖了自2011年发布Java SE 7版之后所发生的全部变化。此外,为了与常见的Java虚拟机实现相匹配,本书还添加了大量修订及说明。
  本版与前面各版一样,仅仅描述了抽象的Java虚拟机,而在实现具体的Java虚拟机时,本书指出了设计规划。Java虚拟机的实现必须体现出本书中的内容,但仅在确有必要时才应该受制于这些规范。
  对于Java SE 8来说,Java编程语言里的一些重要变化在这本Java虚拟机规范中都有相应的体现。为了尽量保持二进制兼容性,我们应该直接在Java虚拟机里指定带有默认实现代码的default方法,而不应该依赖于编译器,因为那样做将无法在不同厂商、不同版本的产品之间移植,此外,那种做法也不可能适用于已有的class文件。在设计JSR 335,也就是《Lambda Expressions for the Java Programming Language》(Java编程语言的lambda表达式)时,Oracle公司的Dan Smith向虚拟机实现者咨询了将default方法集成到常量池和方法结构、方法与接口方法解析算法,以及字节码指令集中的方式。JSR 335也允许在class文件级别的接口里出现private方法与static方法,而这些方法也同接口方法解析算法紧密地结合起来了。
  Java SE 8的特点之一是:Java SE平台的程序库也伴随着Java虚拟机一起进化。有个小例子可以很好地说明这一特点:在运行程序的时候,Java SE 8可以获取方法的参数名,虚拟机会把这些名字存放在class文件结构中,而与此同时,java.lang.reflect.Parameter里也有个标准的API能够查询这些名字。另外,我们也可以通过class文件结构中一项有趣的统计数据来说明这个特点:本规范的第1版中定义了6个属性,其中有3个属性对Java虚拟机至关重要,而Java SE 8版的规范则定义了23个属性,其中只有5个属性对Java虚拟机很重要。换句话说,在新版规范中,属性主要是为了支持程序库而设计的,其次才是为了支持Java虚拟机本身。为了帮助读者理解class文件结构,本规范会更为清晰地描述出每项属性的角色及其使用限制。
  在Oracle公司的Java Platform团队里,有多位同事都对这份规范提供了大力支持,他们包括:Mandy Chung、Joe Darcy、Joel Franck、Staffan Friberg、Yuri Gaevsky、Jon Gibbons、Jeannette Hung、Eric McCorkle、Matherey Nunez、Mark Reinhold、John Rose、Georges Saab、Steve Sides、Bernard Traversat、Michel Trudeau和Mikael Vidstedt。尤其感谢Dan Heidinga (IBM)、Karen Kinnear、Keith McGuigan及Harold Seigel,他们对常见的Java虚拟机实现中的兼容性及安全性贡献良多。
  Alex Buckley于加利福尼亚州圣克拉拉
【免费在线读】


【目录】

译者序
前言
第1章 引言
1.1 简史
1.2 Java虚拟机
1.3 各章节摘要
1.4 说明
1.5 反馈
第2章 Java虚拟机结构
2.1 class文件格式
2.2 数据类型
2.3 原始类型与值
2.3.1 整数类型与整型值
2.3.2 浮点类型、取值集合及浮点值
2.3.3 returnAddress类型和值
2.3.4 boolean类型
2.4 引用类型与值
2.5 运行时数据区
2.5.1 pc寄存器
2.5.2 Java虚拟机栈
2.5.3 Java堆
2.5.4 方法区
2.5.5 运行时常量池
2.5.6 本地方法栈
2.6 栈帧
2.6.1 局部变量表
2.6.2 操作数栈
2.6.3 动态链接
2.6.4 方法调用正常完成
2.6.5 方法调用异常完成
2.7 对象的表示
2.8 浮点算法
2.8.1 Java虚拟机和IEEE,754中的浮点算法
2.8.2 浮点模式
2.8.3 数值集合转换
2.9 特殊方法
2.10 异常
2.11 字节码指令集简介
2.11.1 数据类型与Java虚拟机
2.11.2 加载和存储指令
2.11.3 算术指令
2.11.4 类型转换指令
……
第3章 Java虚拟机编译器
第4章 class文件格式
第5章 加载、链接与初始化
第6章 Java虚拟机指令集
第7章 操作码助记符
附录A Limited License Grant

【内容简介】
  本书由该技术的创立人所写,是权威的Java虚拟机参考资料。书中完备、准确而又详尽地描述了Java虚拟机。它完整地讲述了由JavaSE8所引入的新特性,例如对包含默认实现代码的接口方法所做的调用,以及为支持类型注解及方法参数注解而对class文件格式所做的扩展。此书也阐明了class文件中各属性的含义,以及字节码验证的规则。
返回顶部