《Java虚拟机规范(Java SE 7版)》是Java领域最重要和最权威的着作之一,由Oracle官方发布,基于Java SE 7,对最新的Java虚拟机规范进行了完整且详细的讲解,是深度了解Java虚拟机实现细节的必读之作。由国内几位资深的Java技术专家联袂翻译。《Java虚拟机规范(Java SE 7版)》共7章,第1章从巨观的角度介绍了Java虚拟机与Java的关係与发展历程。第2章概览了Java虚拟机整体架构,包括class档案格式、数据类型、原始类型、引用类型、运行时数据区、栈帧、浮点算法、异常等,这对理解本书后面的内容有重要帮助。第3章详述如何将Java语言编写的程式转换为Java虚拟机指令集,涉及常量、局部变数、控制结构、算术运算、参数接收、方法调用、数组、运算元栈异常处理、同步与注解等。第4章深入分析了用来表示编译后的类和接口的class档案格式,主要包括ClassFile结构、描述符与签名、常量池、栏位、方法、属性、代码约束与class档案校验等。第5章定义了Java虚拟机启动以及类和接口的载入、连结和初始化过程。第6章阐释并列举了Java虚拟机指令集。第7章提供了一张以操作码值为索引的Java虚拟机操作码助记符表。
基本介绍
- 书名:Java虚拟机规范
- 作者:Tim Lindholm Frank Yellin
- 出版社:机械工业出版社
- 页数:316页
- 开本:16
- 品牌:机械工业出版社
- 外文名:The Java Virtual Machine Specification, Java SE 7 Edition
- 类型:计算机与网际网路
- 出版日期:2013年12月15日
- 语种:简体中文
- ISBN:9787111445159
基本介绍
内容简介
《Java虚拟机规范(Java SE7版)》由林德霍尔姆着,本书完整而準确地阐释了Java虚拟机各方面的细节,围绕.Java虚拟机整体架构、编译器、class档案格式、载入、连结与初始化、指令集等核心主题对Java虚拟机进行全面而深入的分析,深刻揭示Java虚拟机的工作原理。同时,基于最新Java SE 7平台,它详细介绍了Java SE 7中新加入的lnvokeDynamic指令和方法句柄机制,给出了在Java SE 6期间引入的类型检查检验器的原理证明。本书还介绍了Java SE 5中对class档案格式的扩展变动,例如泛型和注解等。另外还介绍了Java记忆体模型的指令操作和初始化规则。
作者简介
Tim Lindholm?资深Java虚拟机高级架构师,Java程式语言的主要贡献者之一,Sun公司杰出工程师,目前主要负责移动设备上的Java套用。在到Sun公司工作之前,他已经在美国阿贡国家实验室和Quintus公司从事与虚拟机和运行时系统相关的工作。
Frank Yellin?Sun公司高级工程师,Java项目元老级成员。最近十余年中,他都从事解释型及编译型语言的运行时系统方面的工作。在到Sun公司工作之前,他在Lucid公司从事Common Lisp编译器相关的工作。
Gilad Bracha?Newspeak程式语言的创建者,Sun公司杰出工程师。在到Sun公司工作之前,他在Animorphic Smalltalk System公司从事Strongtalk语言相关的工作。
Alex Buckley?Oracle公司Java程式语言和Java虚拟机规范负责人。
Frank Yellin?Sun公司高级工程师,Java项目元老级成员。最近十余年中,他都从事解释型及编译型语言的运行时系统方面的工作。在到Sun公司工作之前,他在Lucid公司从事Common Lisp编译器相关的工作。
Gilad Bracha?Newspeak程式语言的创建者,Sun公司杰出工程师。在到Sun公司工作之前,他在Animorphic Smalltalk System公司从事Strongtalk语言相关的工作。
Alex Buckley?Oracle公司Java程式语言和Java虚拟机规范负责人。
图书目录
目 录
译者序
前言
第2版前言
第1版前言
第1章 引言1
1.1 简史1
1.2 Java虚拟机2
1.3 各章节摘要2
1.4 说明3
第2章 Java虚拟机结构4
2.1 class档案格式4
2.2 数据类型5
2.3 原始类型与值5
2.3.1 整数类型与整型值6
2.3.2 浮点类型、取值集合及浮点值6
2.3.3 returnAddress类型和值8
2.3.4 boolean类型8
2.4 引用类型与值9
2.5 运行时数据区9
2.5.1 pc暂存器9
2.5.2 Java虚拟机栈9
2.5.3 Java堆10
2.5.4 方法区11
2.5.5 运行时常量池11
2.5.6 本地方法栈11
2.6 栈帧12
2.6.1 局部变数表13
2.6.2 运算元栈13
2.6.3 动态连结14
2.6.4 方法正常调用完成14
2.6.5 方法异常调用完成15
2.7 对象的表示15
2.8 浮点算法15
2.8.1 Java虚拟机和IEEE 754中的浮点算法15
2.8.2 浮点模式16
2.8.3 数值集合转换16
2.9 特殊方法17
2.10 异常18
2.11 位元组码指令集简介20
2.11.1 数据类型与Java虚拟机21
2.11.2 载入和存储指令23
2.11.3 算术指令23
2.11.4 类型转换指令24
2.11.5 对象创建与操作26
2.11.6 运算元栈管理指令26
2.11.7 控制转移指令27
2.11.8 方法调用和返回指令27
2.11.9 抛出异常28
2.11.10 同步28
2.12 类库28
2.13 公有设计,私有实现29
第3章 Java虚拟机编译器30
3.1 示例的格式说明30
3.2 常量、局部变数和控制结构的使用31
3.3 算术运算35
3.4 访问运行时常量池35
3.5 更多控制结构示例36
3.6 接收参数39
3.7 方法调用39
3.8 使用类实例42
3.9 数组43
3.10 编译switch语句45
3.11 使用运算元栈46
3.12 抛出异常和处理异常47
3.13 编译finally语句块50
3.14 同步53
3.15 注解54
第4章 class档案格式55
4.1 ClassFile结构56
4.2 各种内部表示名称60
4.2.1 类和接口的二进制名称60
4.2.2 非全限定名60
4.3 描述符和签名61
4.3.1 语法符号61
4.3.2 栏位描述符61
4.3.3 方法描述符63
4.3.4 签名63
4.4 常量池66
4.4.1 CONSTANT_Class_info结构67
4.4.2 CONSTANT_Fieldref_info、CONSTANT_Methodref_info和CONSTANT_Interface Methodref_info结构67
4.4.3 CONSTANT_String_info结构69
4.4.4 CONSTANT_Integer_info和CONSTANT_Float_info结构69
4.4.5 CONSTANT_Long_info和CONSTANT_Double_info结构70
4.4.6 CONSTANT_NameAndType_info结构71
4.4.7 CONSTANT_Utf8_info结构72
4.4.8 CONSTANT_MethodHandle_info结构74
4.4.9 CONSTANT_MethodType_info结构74
4.4.10 CONSTANT_InvokeDynamic_info结构75
4.5 栏位75
4.6 方法77
4.7 属性80
4.7.1 自定义和命名新的属性81
4.7.2 ConstantValue属性81
4.7.3 Code属性82
4.7.4 StackMapTable属性85
4.7.5 Exceptions属性91
4.7.6 InnerClasses属性92
4.7.7 EnclosingMethod属性94
4.7.8 Synthetic属性94
4.7.9 Signature属性95
4.7.10 SourceFile属性96
4.7.11 SourceDebugExtension属性96
4.7.12 LineNumberTable属性97
4.7.13 LocalVariableTable属性98
4.7.14 LocalVariableTypeTable属性99
4.7.15 Deprecated属性101
4.7.16 RuntimeVisibleAnnotations属性101
4.7.17 RuntimeInvisible Annotations属性105
4.7.18 RuntimeVisibleParameter Annotations属性106
4.7.19 RuntimeInvisibleParameter Annotations属性107
4.7.20 AnnotationDefault属性108
4.7.21 BootstrapMethods属性108
4.8 格式检查110
4.9 Java虚拟机代码约束110
4.9.1 静态约束110
4.9.2 结构化约束113
4.10 class档案校验115
4.10.1 类型检查验证116
4.10.2 类型推导验证178
4.11 Java虚拟机限制184
第5章 载入、连结与初始化186
5.1 运行时常量池186
5.2 虚拟机启动188
5.3 创建和载入188
5.3.1 使用引导类载入器来载入类型190
5.3.2 使用用户自定义类载入器来载入类型190
5.3.3 创建数组类191
5.3.4 载入限制191
5.3.5 从class档案表示得到类192
5.4 连结193
5.4.1 验证194
5.4.2 準备194
5.4.3 解析195
5.4.4 访问控制201
5.4.5 方法覆盖201
5.5 初始化202
5.6 绑定本地方法实现203
5.7 Java虚拟机退出203
第6章 Java虚拟机指令集204
6.1 设定:“必须”的含义204
6.2 保留操作码204
6.3 虚拟机错误205
6.4 指令描述格式205
6.5 指令集描述207
第7章 操作码助记符293
附录A Limited License Grant300
译者序
前言
第2版前言
第1版前言
第1章 引言1
1.1 简史1
1.2 Java虚拟机2
1.3 各章节摘要2
1.4 说明3
第2章 Java虚拟机结构4
2.1 class档案格式4
2.2 数据类型5
2.3 原始类型与值5
2.3.1 整数类型与整型值6
2.3.2 浮点类型、取值集合及浮点值6
2.3.3 returnAddress类型和值8
2.3.4 boolean类型8
2.4 引用类型与值9
2.5 运行时数据区9
2.5.1 pc暂存器9
2.5.2 Java虚拟机栈9
2.5.3 Java堆10
2.5.4 方法区11
2.5.5 运行时常量池11
2.5.6 本地方法栈11
2.6 栈帧12
2.6.1 局部变数表13
2.6.2 运算元栈13
2.6.3 动态连结14
2.6.4 方法正常调用完成14
2.6.5 方法异常调用完成15
2.7 对象的表示15
2.8 浮点算法15
2.8.1 Java虚拟机和IEEE 754中的浮点算法15
2.8.2 浮点模式16
2.8.3 数值集合转换16
2.9 特殊方法17
2.10 异常18
2.11 位元组码指令集简介20
2.11.1 数据类型与Java虚拟机21
2.11.2 载入和存储指令23
2.11.3 算术指令23
2.11.4 类型转换指令24
2.11.5 对象创建与操作26
2.11.6 运算元栈管理指令26
2.11.7 控制转移指令27
2.11.8 方法调用和返回指令27
2.11.9 抛出异常28
2.11.10 同步28
2.12 类库28
2.13 公有设计,私有实现29
第3章 Java虚拟机编译器30
3.1 示例的格式说明30
3.2 常量、局部变数和控制结构的使用31
3.3 算术运算35
3.4 访问运行时常量池35
3.5 更多控制结构示例36
3.6 接收参数39
3.7 方法调用39
3.8 使用类实例42
3.9 数组43
3.10 编译switch语句45
3.11 使用运算元栈46
3.12 抛出异常和处理异常47
3.13 编译finally语句块50
3.14 同步53
3.15 注解54
第4章 class档案格式55
4.1 ClassFile结构56
4.2 各种内部表示名称60
4.2.1 类和接口的二进制名称60
4.2.2 非全限定名60
4.3 描述符和签名61
4.3.1 语法符号61
4.3.2 栏位描述符61
4.3.3 方法描述符63
4.3.4 签名63
4.4 常量池66
4.4.1 CONSTANT_Class_info结构67
4.4.2 CONSTANT_Fieldref_info、CONSTANT_Methodref_info和CONSTANT_Interface Methodref_info结构67
4.4.3 CONSTANT_String_info结构69
4.4.4 CONSTANT_Integer_info和CONSTANT_Float_info结构69
4.4.5 CONSTANT_Long_info和CONSTANT_Double_info结构70
4.4.6 CONSTANT_NameAndType_info结构71
4.4.7 CONSTANT_Utf8_info结构72
4.4.8 CONSTANT_MethodHandle_info结构74
4.4.9 CONSTANT_MethodType_info结构74
4.4.10 CONSTANT_InvokeDynamic_info结构75
4.5 栏位75
4.6 方法77
4.7 属性80
4.7.1 自定义和命名新的属性81
4.7.2 ConstantValue属性81
4.7.3 Code属性82
4.7.4 StackMapTable属性85
4.7.5 Exceptions属性91
4.7.6 InnerClasses属性92
4.7.7 EnclosingMethod属性94
4.7.8 Synthetic属性94
4.7.9 Signature属性95
4.7.10 SourceFile属性96
4.7.11 SourceDebugExtension属性96
4.7.12 LineNumberTable属性97
4.7.13 LocalVariableTable属性98
4.7.14 LocalVariableTypeTable属性99
4.7.15 Deprecated属性101
4.7.16 RuntimeVisibleAnnotations属性101
4.7.17 RuntimeInvisible Annotations属性105
4.7.18 RuntimeVisibleParameter Annotations属性106
4.7.19 RuntimeInvisibleParameter Annotations属性107
4.7.20 AnnotationDefault属性108
4.7.21 BootstrapMethods属性108
4.8 格式检查110
4.9 Java虚拟机代码约束110
4.9.1 静态约束110
4.9.2 结构化约束113
4.10 class档案校验115
4.10.1 类型检查验证116
4.10.2 类型推导验证178
4.11 Java虚拟机限制184
第5章 载入、连结与初始化186
5.1 运行时常量池186
5.2 虚拟机启动188
5.3 创建和载入188
5.3.1 使用引导类载入器来载入类型190
5.3.2 使用用户自定义类载入器来载入类型190
5.3.3 创建数组类191
5.3.4 载入限制191
5.3.5 从class档案表示得到类192
5.4 连结193
5.4.1 验证194
5.4.2 準备194
5.4.3 解析195
5.4.4 访问控制201
5.4.5 方法覆盖201
5.5 初始化202
5.6 绑定本地方法实现203
5.7 Java虚拟机退出203
第6章 Java虚拟机指令集204
6.1 设定:“必须”的含义204
6.2 保留操作码204
6.3 虚拟机错误205
6.4 指令描述格式205
6.5 指令集描述207
第7章 操作码助记符293
附录A Limited License Grant300
文摘
第1章
引 言
1.1 简史
Java语言是一门通用的、面向对象的、支持并发的程式语言。它的语法与C和C++语言非常相似,但隐藏了C和C++中许多複杂、深奥及不安全的语言特性。Java平台最初用于解决基于网路的消费类设备上的软体开发问题,它在设计上就考虑到要支持部署在不同架构的主机上,并且不同组件之间可以安全地互动。面对这些需求,编译出来的本地代码必须解决不同网路间的传输问题,可以操作各式各样的客户端,并且还要在这些客户端上能安全正确地运行。
伴随着全球资讯网的盛行发生了一些十分有趣的事情:Web浏览器允许数以百万计的用户共同在网上冲浪,以及通过很简单的方式访问丰富多样的内容。用户冲浪所使用的设备并不是其中的关键,它们仅仅是一种媒介,无论机器的性能如何,无论使用高速网路还是慢速的modem,这些外界因素本质上与你所看到的、听到的内容没有任何关係。
Web狂热者很快就发现网路信息的载体——HTML文档格式对信息的表达有很多限制,HTML的一些扩展套用,譬如网页表单,让这些限制显得更加明显。显而易见,没有任何浏览器能够承诺它可以提供给用户所需要的全部特性,扩展能力将是解决这个问题的唯一答案。
Sun公司的HotJava浏览器是世界上第一款展现出Java语言某些有趣特性的浏览器,它允许把Java代码内嵌入HTML页面。在HTML页面呈现的时候,这些Java代码显式地下载至浏览器中。而在浏览器获取这些代码之前,它们已经过严谨地检查以保证它们是安全的。与HTML语言一样,这些Java代码与网路和主机是完全无关的,无论代码来自哪里,在哪台机器上执行,它们执行时都能表现出一致的行为。
带有Java技术支持的网页浏览器将不再受限于它本身所提供的功能。浏览网页的用户可以放心地假定在他们机器上运行的动态内容不会损害其机器。软体开发人员编写一次代码,程式就可以运行在所有支持Java运行时环境的机器之上。
引 言
1.1 简史
Java语言是一门通用的、面向对象的、支持并发的程式语言。它的语法与C和C++语言非常相似,但隐藏了C和C++中许多複杂、深奥及不安全的语言特性。Java平台最初用于解决基于网路的消费类设备上的软体开发问题,它在设计上就考虑到要支持部署在不同架构的主机上,并且不同组件之间可以安全地互动。面对这些需求,编译出来的本地代码必须解决不同网路间的传输问题,可以操作各式各样的客户端,并且还要在这些客户端上能安全正确地运行。
伴随着全球资讯网的盛行发生了一些十分有趣的事情:Web浏览器允许数以百万计的用户共同在网上冲浪,以及通过很简单的方式访问丰富多样的内容。用户冲浪所使用的设备并不是其中的关键,它们仅仅是一种媒介,无论机器的性能如何,无论使用高速网路还是慢速的modem,这些外界因素本质上与你所看到的、听到的内容没有任何关係。
Web狂热者很快就发现网路信息的载体——HTML文档格式对信息的表达有很多限制,HTML的一些扩展套用,譬如网页表单,让这些限制显得更加明显。显而易见,没有任何浏览器能够承诺它可以提供给用户所需要的全部特性,扩展能力将是解决这个问题的唯一答案。
Sun公司的HotJava浏览器是世界上第一款展现出Java语言某些有趣特性的浏览器,它允许把Java代码内嵌入HTML页面。在HTML页面呈现的时候,这些Java代码显式地下载至浏览器中。而在浏览器获取这些代码之前,它们已经过严谨地检查以保证它们是安全的。与HTML语言一样,这些Java代码与网路和主机是完全无关的,无论代码来自哪里,在哪台机器上执行,它们执行时都能表现出一致的行为。
带有Java技术支持的网页浏览器将不再受限于它本身所提供的功能。浏览网页的用户可以放心地假定在他们机器上运行的动态内容不会损害其机器。软体开发人员编写一次代码,程式就可以运行在所有支持Java运行时环境的机器之上。
序言
前 言
本书整合了自1999年《Java虚拟机规范(第2版)》发布以来Java世界所出现的技术变化。另外,还修正了第2版中的许多错误,以及对目前主流Java虚拟机实现来说已经过时的内容。最后还处理了一些Java虚拟机和Java语言概念的模糊之处。
针对本书,读者有任何勘误或模糊之处,均可发邮件到jvms-comments-ww@oracle.com。
2004年发布的Java SE 5.0版为Java语言带来了翻天覆地的变化,但是对Java虚拟机设计的影响则相对较小。在Java SE 7这个版本中,我们扩充了class档案格式以便支持新的Java语言特性,譬如泛型和变长参数方法等。
2006年发布的Java SE 6.0版看起来并没有为Java语言带来什幺新的变化,但是对Java虚拟机的影响就比较大。如新的位元组码验证方式,它源于Eva Rose的一篇硕士论文,文中以Java Card平台为背景,展示了Java虚拟机位元组码验证的另一种全新的实现思路。这促进了Java ME CLDC第1版实现的诞生,并最终成为Java SE平台class验证过程的理论基础。关于这部分内容将会在第4章中介绍。
Sheng Liang实现了Java ME CLDC的验证器。Gilad Bracha负责对该验证器做出详细说明,Antero Taivalsaari则是整个Java ME CLDC规范的负责人。Alessandro Coglio在位元组码验证的分析方面的工作对本规范做出了很大的贡献。Wei Tao、Frank Yellin、TimLindholm与Gilad Bracha一起实现的Prolog验证器是Java ME和Java SE平台规范的共同基础。Wei Tao后续继续实现了实际运用于Hot Spot Java虚拟机的验证器。之后Mingyao Yang改进了规范和设计,形成了Java SE 6中的最终实现版本。该规范成文得益于以下JSR 202专家组成员:Peter Burka、Alessandro Coglio、Sanghoon Jin、Christian Kemper、Larry Rau、EvaRose以及 Mark Stolz。
在2011年发布的Java SE 7平台终于兑现了在1997年《Java虚拟机规范》第1版中就已做出的承诺:“在未来,我们会对Java虚拟机进行适当扩展,以便更好地支持其他语言运行于JVM之上。”Gilad Bracha的工作是开发Java虚拟机中的热替换(hotswapping)功能,以及在Java虚拟机静态类型系统上支持动态类型语言实现。invokedynamic指令以及支持这个指令的基础架构由John Rose以及JSR 292专家组成员:Ola Bini、 Rémi Forax、Dan Heidinga、Fredrik ?hrstr?m、JochenTheodorou进行开发。还有Charlie Nutter和Christian Thalinger做出了特别贡献。
还有许多人的名字应当出现在这里,他们在不同时间段对Java虚拟机的设计和实现做出过贡献。我们今天所见的Java虚拟机拥有卓越的执行性能,这离不开DavidUngar和他的同事们在Sun实验室Self项目中所积累的技术基础。这些技术最初用于Self语言,后来形成了Animorphic Smalltalk虚拟机,经过长期而曲折的发展,最终成为今天Oracle HotSpot JVM的技术基础。Lars Bak和Urs H?lzle经历了所有上述的技术发展阶段,对于今天的Java虚拟机能够拥有大家认为理所当然的高效执行性能,他们实在是居功至伟。
本规范中很多意义深远的改进来自于Martin Buchholz、Brian Goetz、Paul Hohensee、David Holmes、Karen Kinnear、Keith McGuigan、Jeff Nisewanger、 Mark Reinhold、Naoto Sato、BillPugh、Uday Dhanikonda、Janet Koenig、AdamMessinger、John Pampuch、Georges Saab和Bernard Traversat所作出的贡献。Jon Courtney和Roger Riggs帮助我们保证此规范的内容可同时适用于Java ME和Java SE平台。Leonid Arbouzov、Stanislav Avzan、Yuri Gaevsky、Ilya Mukhin、Sergey Reznick和Kirill Shirokov在Java技术兼容包(JavaCompatibility Kit,JCK)上作出了卓越贡献,以保证本规范中描述的内容是可测试并且已测试的。
Gilad Bracha
Los Altos,California
Alex Buckley
Santa Clara,California
本书整合了自1999年《Java虚拟机规范(第2版)》发布以来Java世界所出现的技术变化。另外,还修正了第2版中的许多错误,以及对目前主流Java虚拟机实现来说已经过时的内容。最后还处理了一些Java虚拟机和Java语言概念的模糊之处。
针对本书,读者有任何勘误或模糊之处,均可发邮件到jvms-comments-ww@oracle.com。
2004年发布的Java SE 5.0版为Java语言带来了翻天覆地的变化,但是对Java虚拟机设计的影响则相对较小。在Java SE 7这个版本中,我们扩充了class档案格式以便支持新的Java语言特性,譬如泛型和变长参数方法等。
2006年发布的Java SE 6.0版看起来并没有为Java语言带来什幺新的变化,但是对Java虚拟机的影响就比较大。如新的位元组码验证方式,它源于Eva Rose的一篇硕士论文,文中以Java Card平台为背景,展示了Java虚拟机位元组码验证的另一种全新的实现思路。这促进了Java ME CLDC第1版实现的诞生,并最终成为Java SE平台class验证过程的理论基础。关于这部分内容将会在第4章中介绍。
Sheng Liang实现了Java ME CLDC的验证器。Gilad Bracha负责对该验证器做出详细说明,Antero Taivalsaari则是整个Java ME CLDC规范的负责人。Alessandro Coglio在位元组码验证的分析方面的工作对本规范做出了很大的贡献。Wei Tao、Frank Yellin、TimLindholm与Gilad Bracha一起实现的Prolog验证器是Java ME和Java SE平台规范的共同基础。Wei Tao后续继续实现了实际运用于Hot Spot Java虚拟机的验证器。之后Mingyao Yang改进了规范和设计,形成了Java SE 6中的最终实现版本。该规范成文得益于以下JSR 202专家组成员:Peter Burka、Alessandro Coglio、Sanghoon Jin、Christian Kemper、Larry Rau、EvaRose以及 Mark Stolz。
在2011年发布的Java SE 7平台终于兑现了在1997年《Java虚拟机规范》第1版中就已做出的承诺:“在未来,我们会对Java虚拟机进行适当扩展,以便更好地支持其他语言运行于JVM之上。”Gilad Bracha的工作是开发Java虚拟机中的热替换(hotswapping)功能,以及在Java虚拟机静态类型系统上支持动态类型语言实现。invokedynamic指令以及支持这个指令的基础架构由John Rose以及JSR 292专家组成员:Ola Bini、 Rémi Forax、Dan Heidinga、Fredrik ?hrstr?m、JochenTheodorou进行开发。还有Charlie Nutter和Christian Thalinger做出了特别贡献。
还有许多人的名字应当出现在这里,他们在不同时间段对Java虚拟机的设计和实现做出过贡献。我们今天所见的Java虚拟机拥有卓越的执行性能,这离不开DavidUngar和他的同事们在Sun实验室Self项目中所积累的技术基础。这些技术最初用于Self语言,后来形成了Animorphic Smalltalk虚拟机,经过长期而曲折的发展,最终成为今天Oracle HotSpot JVM的技术基础。Lars Bak和Urs H?lzle经历了所有上述的技术发展阶段,对于今天的Java虚拟机能够拥有大家认为理所当然的高效执行性能,他们实在是居功至伟。
本规范中很多意义深远的改进来自于Martin Buchholz、Brian Goetz、Paul Hohensee、David Holmes、Karen Kinnear、Keith McGuigan、Jeff Nisewanger、 Mark Reinhold、Naoto Sato、BillPugh、Uday Dhanikonda、Janet Koenig、AdamMessinger、John Pampuch、Georges Saab和Bernard Traversat所作出的贡献。Jon Courtney和Roger Riggs帮助我们保证此规范的内容可同时适用于Java ME和Java SE平台。Leonid Arbouzov、Stanislav Avzan、Yuri Gaevsky、Ilya Mukhin、Sergey Reznick和Kirill Shirokov在Java技术兼容包(JavaCompatibility Kit,JCK)上作出了卓越贡献,以保证本规范中描述的内容是可测试并且已测试的。
Gilad Bracha
Los Altos,California
Alex Buckley
Santa Clara,California