[链接帖] 新的Java语言规范、Java虚拟机规范

标签: 链接 java 语言 | 发表时间:2011-06-12 09:35 | 作者:(author unknown) Wong
出处:http://rednaxelafx.iteye.com
随着7月28日,也就是Java SE 7预定的发布日期越来越近,相关的一些规范也已得到或即将得到批准。

这里主要关注的是下面几个规范:
JSR 336: Java™ SE 7 Release Contents
JSR 901: Java™ Language Specification
JSR 924: Java™ Virtual Machine Specification

Java语言规范,JSR 901的第三修订版(Maintenance Review 3)已经完成审核但尚未正式得到批准。
Java虚拟机规范,JSR 924的第三修订版(Maintenance Review 3)在今年3月19日已经得到批准。

这两个规范以前在java.sun.com官网上的链接昨天已经坏掉了。事情挺突然的,前天我还打开过老的JVM规范的链接,昨天再试就不行了。

已死的链接
Java语言规范:http://java.sun.com/docs/books/jls/
Java虚拟机规范:http://java.sun.com/docs/books/jvms/
<< 2011-06-13更新:这两个链接今天又恢复了。不过里面的内容还没全恢复,只能看到目录。
<< 2011-06-??更新:貌似两个都完全恢复了,耶。

如果有人对考古感兴趣的话,从这里可以下载到Java虚拟机规范1.0 Beta:
http://www.di.uniovi.es/procesadores/Herramientas/Java/Bytecodes/vmspec.pdf

======================================================================

现在这几个规范的准确版本叫起来有点麻烦。

以前Java语言规范的大版本有三个,分别是第一版(First Edition,对应Java 1.0)、第二版(Second Edition,对应Java 2 SE 1.2)、第三版(Third Edition,对应Java SE 5)。Java SE 6有个修正补丁,不过没出新的大修订版规范。

以前Java虚拟机规范的大版本则有两个,分别是第一版(First Edition,对应Java 1.0)、第二版(Second Edition,对应Java 2 SE 1.2)。Java SE 5和Java SE 6分别有些补丁,特别是Java SE 5的补丁很大,本来应该出大的修订版但Java官网上一直没更新相关信息。
实际上JSR 924就是从Java SE 5开始跟踪Java虚拟机规范的变更点的一个规范。只不过在Java SE 5和Java SE 6的时候一直没出整合的新规范,只给了补丁。

现在,两规范的新版本都不再遵循原本的序号了,而是直观的叫做“Java SE 7版”(也就是上面提到的第三修订版,Maintenance Review 3)。所以注意了哦,新的Java语言规范不叫“Java语言规范,第四版”,而是叫“Java语言规范,Java SE 7版”;JVM规范同理。

命名来源可参考此文档
引用
The complete amended specification is the Java Virtual Machine Specification, Java SE 7 Edition. (The next edition of the Java Language Specification will also be known as the Java SE 7 Edition.)


======================================================================

上面提到了Java SE 7的几个新规范,如果想跟踪相应的实现进度,可以关注这几个地方:

Java SE 7的参考实现的JDK7:
OpenJDK: JDK7 Project
java.net: JDK7 Project

另外两个主流JDK实现:
Oracle JRockit
IBM JDK

另外,Java SE规范与JDK版本之间的关系也值得留意一下。Stephen Colebourne发过一帖,里面特别强调了JDK是实现而Java SE是标准,两个概念的意思的不一样的:
Stephen Colebourne: No more Java 7
此文对Sun迟迟不推进新的JSR来定义Java SE 7规范颇有微词。请只参考其中提到JDK与Java SE两概念的区别的部分。

======================================================================

发这篇日志的原因是最近接连有好几个人问到关于Java内存模型(Java Memory Model)的规定,例如这里提到的
不少人都还在引用过时的文档,例如说Java语言规范第二版与Java虚拟机规范第二版的内容。它们在Java SE 5的时候就已经不适用,有新版本的规范替代了老的版本。

因而像是老的Java语言规范中提到的“read/load/store/write”等概念,因为定义不够明确所以在较新版本规范(Java语言规范第三版/Java SE 5对JVM规范的补丁)已经不再使用这样的概念了。我觉得没必要在这种已经被淘汰的概念上深究。

题外,放张JavaOne 2000 TS-754的图:

这是Java SE 5对Java内存模型修正之前的描述。多有趣 XD

Java平台即将渐渐向新的Java SE 7过渡。在这个前提下,我觉得以后在讨论JVM问题时,如果需要援引规范的规定,还是参考最新的版本比较好。

如果以前已经读过Java虚拟机规范第二版,想了解新版本规范与第二版的差异,下面的这个文档是个不错的入口:
Maintenance Review of JSR 924 (JavaTM Virtual Machine Specification) for Java SE 7
这篇文档有需求的话以后可以翻译一下…不过我还是想推荐阅读原文。

除了前面提到关于Java内存模型的规定得到了修正外,像是Class文件的校验方式之类的规定也有更新:版本号在51.0或更高的Class文件必须使用type checking校验而不能使用type inferencing校验;版本号在51.0或更高的Class文件中不允许出现jsr/jsr_w指令,等等。
相信现在还有许多人以为Java语言的try/catch/finally是用jsr/ret指令来实现的,特别是只读过老的Java虚拟机规范或者《深入Java虚拟机》(第一或第二版)的人。事实上Sun JDK里的javac从1.4.2开始就已经不生成jsr指令的,因为这条指令的原始规定不便于校验,也不便于编译器的分析,所以被废弃了。如今这条指令终于在规范里也得到明文规定被废弃。

所以想提醒大家的是,读资料啊文档啊啥的请留意它的原始出处和有效日期。

已有 5 人发表留言,猛击->>这里<<-参与讨论


ITeye推荐



相关 [链接 java 语言] 推荐:

[链接帖] 新的Java语言规范、Java虚拟机规范

- Wong - Script Ahead, Code Behind
随着7月28日,也就是Java SE 7预定的发布日期越来越近,相关的一些规范也已得到或即将得到批准. 这里主要关注的是下面几个规范:. Java语言规范,JSR 901的第三修订版(Maintenance Review 3)已经完成审核但尚未正式得到批准. Java虚拟机规范,JSR 924的第三修订版(Maintenance Review 3)在今年3月19日已经得到批准.

java JDBC 链接hive 操作实例

- - CSDN博客云计算推荐文章
1.在eclipse下面 导入包,简便方式 new ->mapred project -> 右键 ->选择“Properties”->Java Build Path->Library->Add External Jars 将/usr/hive/lib的所有jar包 添加上. (因为之前的配置 所有jar包 已经包括 java链接mysql的包).

Java跨语言调用实现方案

- LightingMan - 淘宝JAVA中间件团队博客
在大型分布式 java 应用中,为了方便开发者,通常底层的 rpc 框架都会做一些调用的封装,让应用层开发人员在开发服务的时候只用编写简单的 pojo 对象就可以了,如流行的 spring remoting , jboss remoting 等等,都有这样的效果. 随着业务的需要,可能上层应用希望采用非 java 技术,如 php , ruby on rails ,而由于 java gc 和内存模型的限制,可能有的底层服务又需要采用更高性能和更加灵活的技术,如果 c++ , python 等.

java语言常用性能优化技巧

- - Java - 编程语言 - ITeye博客
java语言常用性能优化技巧介绍.     java程序常用的方法有以下几种:.     1.不用new关键词创建类的实例. 用new关键词创建类的实例时,构造函数链中的所有构造函数都会被自动调用. 但如果一个对象实现了Cloneable接口,我们可以调用它的clone()方法. clone()方法不会调用任何类构造函数.

探索Java语言与JVM中的Lambda表达式(译)

- - BlogJava_首页
探索Java语言与JVM中的Lambda表达式.     Lambda表达式是自Java SE 5引入泛型以来最重大的Java语言新特性,本文是2012年度最后一期 Java Magazine中的 一篇文章,它介绍了Lamdba的设计初衷,应用场景与基本语法. (2013.01.02最后更新).

jdk1.6 java语言 连接pcsc读卡器 发送APDU指令

- - CSDN博客编程语言推荐文章
java语言操作读卡器  jdk1.6 提供的Package javax.smartcardio可以直接连接pcsc读卡器、和读卡器进行指令交互. Package javax.smartcardio详细信息. 作者:wyx100 发表于2014-9-22 0:13:28 原文链接. 阅读:147 评论:0 查看评论.

2011年10月编程语言排行榜:Java人气持续走低

- coofucoo - cnBeta.COM
在TIOBE公布的2011年10月编程语言排行榜中,Java继续着9月的势头,持续走低,下降了几乎1%的人气,尽管Oracle在八月初发布了最新的Java 7. 看来下个月C语言又要复返第一的宝座了.

Java之父评价C语言之父:我用尽了形容词

- satan - Solidot
伯乐 写道 "詹姆斯·高斯林在上周发布了关于讨论C语言之父丹尼斯·里奇(Dennis Ritchie)的简短博文(中文),认为他的影响巨大,并超越了科技世界,虽然他的大多影响都不为人知,但完全可以感受到. 他说,“我的整个职业生涯也是从C和Unix中发展而来. 对当今的大多数工程师而言,很难理解我在20世纪70年代感受到的幸福愉快感.

TIOBE 11月编程语言排行榜 09年7月以来Java再次超过20%

- - 博客园_新闻
Java 在 TIOBE 指数仍然持续上涨,现在已打败了 20%. 因为 10 月底成功召开的 JavaOne 大会,它的受欢迎程度有可能进一步上升. 目前 Java 和C两大语言和其余的包之间的差距现在超过 10%. 本月前 50 排名上升幅度较大的是 OpenEdge ABL(从 19 上升至 38),VBScript(从 77 上升至 46)和 GO(从 65 上升至 48).

Java中的锁(Locks in Java)

- - 并发编程网 - ifeve.com
原文链接 作者:Jakob Jenkov 译者:申章 校对:丁一. 锁像synchronized同步块一样,是一种线程同步机制,但比Java中的synchronized同步块更复杂. 因为锁(以及其它更高级的线程同步机制)是由synchronized同步块的方式实现的,所以我们还不能完全摆脱synchronized关键字( 译者注:这说的是Java 5之前的情况).