本书整合了自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
第2版前言
《Java虚拟机规范(第2版)》将规范所描述内容的技术背景升级到了Java 2平台(JDK 1.2),它还包括了许多对第1版的修正,并且在不改变规范内容逻辑的情况下,使描述变得更加清晰。我们也尝试调整了规范中的字体样式、勘误(希望勘误不会产生新的错误)以及对规范中模糊的部分增加额外的描述。另外,我们还修正了许多《Java虚拟机规范》和《Java语言规范》之间不一致的内容。
我们很感谢所有为我们梳理过第一版规范并指出问题的读者,特别感谢以下个人和团体,他们指出了问题甚至直接提供了修改意见。
Carla Schroer与她在加利福尼亚州古本蒂诺、俄罗斯新西伯利亚的兼容性测试团队(尤其感谢其中的Leonid Arbouzov和AlexeiKaigorodov)。他们煞费苦心地为第1版中各处可测试的场景编写了兼容性测试用例。在这个过程中,他们还发现了许多处第1版规范中不清晰和不完整的内容。Jeroen Vermeulen、Janice Shepherd、Peter Bertelsen、Roly Perera、JoeDarcy与Sandra Loosemore提交了许多有用的建议和反馈,这些建议和反馈对于第2版规范的改进工作有很大帮助。Addison Wesley Longman出版社的编辑Marilyn Rash和Hilary Selby Polk帮助我们在第2版中合并技术变更的同时,改进了规范的可读性和内容的布局排版。
还要特别感谢Gilad Bracha,他对本书出版进行了严格审查,另外他也是本书新增内容的主要贡献者,尤其是第4、5章。他对计算机理论的贡献以及他解决的《Java虚拟机规范》和《Java语言规范》之间的描述差异问题都极大地完善了本书。
Tim Lindholm
Palo Alto,California
Frank Yellin
. Redwood City,California
1999年4月
第1版前言
《Java虚拟机规范》是描述Java虚拟机设计原理的一份完整的规范文档。这份文档对于任何一个希望实现Java虚拟机的编译器作者,或者希望实现一个与规范兼容的Java虚拟机的程序员来说都是必不可少的。
Java虚拟机是一个抽象化的机器,整个规范中提及的Java虚拟机都是抽象化的概念,而不是特指Oracle或者其他某一家公司的Java虚拟机实现。本书与一个具体的虚拟机实现之间的关系就犹如一份建筑蓝图与一间具体的房屋之间的关系一样。Java虚拟机具体实现(包括任何公司的JVM实现)必须包括本规范所描述的内容,但是除了少数绝对必要的地方外,本规范中的描述不应成为Java虚拟机具体实现的束缚。我们希望这个规范至少能作为一个“实验室”版本的虚拟机实现的完整描述。
Java虚拟机源于由James Gosling在1992年设计,用于支持Oak程序语言的虚拟机。在Java虚拟机的发展历程中,Sun公司的Green项目、FirstPerson公司、LiveOak项目、Java产品组、JavaSoft公司以及今天的Oracle公司的Java平台组中许多人都作出了直接或间接的贡献。
这本书最初是源于由Kathy Walrath编著的一份公司内部文档。Mary Campione将本书转换为HTML版本,使大家可通过互联网访问到本书。
《Java虚拟机规范》的诞生离不开Java产品团队的总经理Ruth Hennigar的大力支持,还有编辑Lisa Friendly、Mike Hendrickson以及他在Addison-Wesley出版社的团队所做出的编辑工作。在此特别感谢Richard Tuck对原稿的仔细审查,还有Bill Joy对本书的审查、评价和指导意见,这些宝贵信息对本书定稿都有很大的帮助。
Tim Lindholm
Palo Alto,California
Frank Yellin
Redwood City,California
1996年6月
从1999年4月出版《Java虚拟机规范(第2版)》至今,已经14年过去了,虽然此规范在JDK5发布的时候做了较大的更新,但却始终没有发布完整的规范。2011年6月28日,最新的《Java虚拟机规范》终于完成并在7月份正式发布。对于想了解Java虚拟机的程序员来说,本书是必须阅读的;想深入了解Java语言细节的程序员阅读本书也有极大好处,但是《Java虚拟机规范》、《Java语言规范》发布十余年,一直没有中文译本,这令国内不少对Java虚拟机感兴趣但英语能力较弱的程序员只能望书兴叹。
2011年年初,本书还处于草稿状态时,我就开始关注本书,并陆续对其中第1、2、6、7章进行了翻译,到2011年9月时完成了200余页的译稿。这时候又在国内著名Java社区ItEye中结识了另外三名译者薛笛、吴璞渊和冶秀刚,我们在随后的两个多月的时间里共同完成了其余章节的翻译和校对。在2013年,机械工业出版社获得了这本书的版权,并且采用了我们翻译的版本出版,因此有了这本中文版图书。
本书并非某一款虚拟机实现的说明书,它是一份保证各个公司的Java虚拟机实现具备统一外部接口的契约文档,书中的概念和细节描述曾经与Sun公司早期虚拟机的实现高度吻合,但是随着技术的发展,高性能虚拟机真正的细节实现方式已经渐渐与虚拟机规范所描述的内容产生了越来越大的差距。作者也在书中不同地方反复强调:虚拟机规范中所提及的“Java虚拟机”皆为虚拟机的概念模型而非具体实现。实现只要保证与概念模型最终等效即可,而具体实现的方式无需受概念模型束缚。因此,通过《Java虚拟机规范》分析程序的执行语义问题(虚拟机会做什么)是十分合适且具权威性的,但分析程序的执行行为问题(虚拟机是怎样做的、性能如何)则意义不大,如果需要对具体虚拟机实现进行调优、性能分析等,我推荐在本书基础上继续阅读《Java Performance》和《Oracle JRockit:The Definitive Guide》等书。
在翻译过程中,我们尽最大努力保证作品的准确性和可读性,力求在保证语义准确的前提下,尽可能使用通俗易懂的方式向给各位读者介绍Java虚拟机的约束与运作原理。为实现此目标,我们在翻译专有技术名词、偏僻词时用括号保留了原文,并专门在多处读者理解起来可能有困难的地方,添加了“译者注”加以解释。
囿于我们的水平和翻译时间,书中难免存在不妥之处,大家如有任何意见或建议都欢迎通过以下电子邮箱与我联系:understandingjvm@gmail.com。
周志明
规范性的东西,不同的JVM厂商有不同的JVM实现。很多东西,JVM规范并没有强制要求,具体还是要看JVM实现。这本书写的还是不错,但是不容忽视的一点是,看着看着,你一定会睡着。你真的会睡着的。 这本书的封面不错,看起来比较有感觉。
评分sun的vmspec是免费的在线的,看起来却很轻松,非常适合想了解vm底层的java程序员,看完之后对bytecode应该能看懂了
评分sun的vmspec是免费的在线的,看起来却很轻松,非常适合想了解vm底层的java程序员,看完之后对bytecode应该能看懂了
评分The Java® Virtual Machine Specification Java SE 8 Edition Tim Lindholm Frank Yellin Gilad Bracha Alex Buckley 2015-02-13 Online version: http://docs.oracle.com/javase/specs/jvms/se8/html/
评分sun的vmspec是免费的在线的,看起来却很轻松,非常适合想了解vm底层的java程序员,看完之后对bytecode应该能看懂了
这本书的严谨性是毋庸置疑的,但我想强调的是,它对读者的前置知识储备要求极高。如果你对计算机科学中的形式化描述、抽象代数或者至少是扎实的汇编语言概念不熟悉,那么阅读过程很可能会变成一场折磨。它不是一本普及性的读物,更像是一份高度专业化的工程蓝图。例如,对于各种引用类型的准确界定,以及它们在不同上下文中的处理规则,规范描述得非常精确,但若没有相应的理论基础支撑,很容易在理解上产生偏差。我最欣赏的一点是,它没有试图美化或简化任何复杂性;它忠实地记录了Java SE 7时代虚拟机的设计决策和约束条件。这种直面真实复杂性的态度,反而给予了资深开发者最大的自由——因为你知道了边界在哪里,才能更好地在外围进行创新和优化。它教会我们的,是如何精确地“思考”Java的执行环境,而不是仅仅停留在“使用”层面。
评分对于我个人而言,这本书的价值更多体现在其作为“参考地图”的作用上。我通常不会从头到尾地阅读它,而是在特定需求出现时,有针对性地去查阅对应的章节。比如,当我们需要分析一个老旧的Java Agent是如何在不修改源代码的情况下注入方法的,或者需要深入了解启动过程中类文件格式的校验步骤时,这本书就是我的首选。它详尽地列出了Class File结构中各个字段的字节偏移量和含义,这种对二进制层面的描述,是任何高级API文档都无法比拟的。它提供的是一种自底向上的视角,让你看到Java这棵参天大树的根系是如何扎入操作系统的。如果你的工作涉及到字节码操作、静态分析或者开发JVM相关的工具,那么这本书的价值就无法用金钱衡量。它将那些被封装在JDK内部的复杂逻辑,以一种清晰、可验证的方式呈现出来,让你不再对JVM的内部工作流程感到神秘莫测,而是将其视为一个可被精确控制和理解的工程系统。
评分初次捧读这本厚重的技术典籍时,我本以为自己会深陷于晦涩的术语和复杂的流程图中而迷失方向,毕竟虚拟机规范这东西听起来就带着一股子“劝退”的气息。然而,令我惊喜的是,作者在构建这个庞大知识体系时,展现出了极高的组织能力和逻辑清晰度。虽然主题极其专业,但叙述的脉络却如同精密的瑞士钟表,每一个齿轮的咬合都清晰可见。比如,在描述到异常处理和跳转指令时,它不仅仅罗列了规则,更重要的是解释了为什么需要这样的设计,以及它如何与字节码的结构相辅相成。我尤其欣赏它在定义关键数据结构时的精确性,每一个位(bit)的含义都得到了明确的界定,这对于编写需要高度依赖规范兼容性的工具链的开发者来说,简直是福音。这本书要求读者具备一定的计算机体系结构和编译原理基础,但即使你只是一个中级Java程序员,只要愿意投入时间去理解这些“为什么”,你对Java语言的理解深度将得到质的飞跃,你会开始明白,那些看似灵活的Java特性背后,是多么铁板一块的规范在支撑。
评分这部关于Java虚拟机规范的著作,对于任何一个希望深入理解Java运行时环境底层运作机制的开发者来说,都是一本不可多得的宝典。我曾多次在调试那些看似玄乎的内存溢出或线程死锁问题时,翻阅这本书,并从中获得了宝贵的洞察力。它并非那种教你如何写出“漂亮”代码的书,而是一本硬核的技术手册,详细阐述了字节码指令集、内存模型(特别是Java SE 7这个关键版本下的规范),以及类加载机制的每一个细枝末节。阅读过程中,我深刻体会到,理解JVM的规范,就好比掌握了建筑图纸,能够让你清晰地看到Java程序在机器上是如何被构建、执行和消亡的。例如,关于常量池的解析细节,以及不同类型的字段和方法在运行时如何被准确地定位和调用,书中描述得极为详尽和严谨。那种逐字逐句啃读规范,然后对照实际运行现象进行验证的过程,充满了智力上的挑战与满足感。它迫使你从更高的抽象层面跳脱出来,去关注那些在日常应用开发中往往被屏蔽掉的、真正决定性能和稳定性的核心原理。对于那些热衷于JIT编译优化或者希望自己动手实现类似JVM特性的资深工程师而言,这本书无疑是构建坚实理论基础的基石。
评分坦白说,这本书的阅读体验并不轻松,它更像是一次对心智的深度拉练,而非轻松的消遣。我记得有一次,为了完全搞清楚Java SE 7版本中引入的某些特定验证逻辑,我不得不对照规范中的附录和图表反复推敲了好几个小时。这本规范的价值在于其权威性和不可替代性,它定义了“标准”,而不是提供“技巧”。你不会从中学到如何在Spring Boot中配置一个更快的启动器,也不会找到关于并发编程的最佳实践建议。它的焦点完全聚焦于“是什么”和“如何被定义”,而不是“如何用得更好”。对于那些习惯于阅读博客文章和在线教程的开发者来说,这种直接面对正式规范的阅读方式可能会感到枯燥和抽象。但正是这种对细节的极致刻画,使得它成为排查那些跨平台、跨JDK版本差异问题的最终仲裁者。当你面对一个看似是JDK Bug的问题时,翻开这本书,你才能确定到底是实现出了偏差,还是你对规范的理解有误。它的分量,完全体现在其作为“真理之源”的地位上。
评分必读,基本功。
评分Oracle出的
评分后面会写书评 还需要多看几遍
评分读的最新的SE8版本,太干了完全啃不动
评分字节码讲的比较多,主要讲JVM概念模型。功力不够,很吃力
本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度,google,bing,sogou 等
© 2026 book.quotespace.org All Rights Reserved. 小美书屋 版权所有