java 语言规范

74 篇文章 0 订阅
随着7月28日,也就是 Java SE 7 预定的发布日期越来越近,相关的一些规范也已得到或即将得到批准。 

这里主要关注的是下面几个规范: 
JSR 336: Java™ SE 7 Release Contents  

转载:http://rednaxelafx.iteye.com/blog/1081626


JSR 901: Java™ Language Specification 

JSR 924: Java™ Virtual Machine Specification  

Java语言规范, JSR 901的第三修订版(Maintenance Review 3) 已经完成审核但尚未正式得到批准。 
Java语言规范的Java SE 7版的正式版在这里: http://download.oracle.com/javase/7/specs/jls/JLS-JavaSE7.pdf  

Java虚拟机规范, JSR 924的第三修订版(Maintenance Review 3) 在今年3月19日已经得到批准。 
Java虚拟机规范的Java SE 7版的正式版在这里: http://download.oracle.com/javase/7/specs/jvms/JVMS-JavaSE7.pdf  
更新:Java虚拟机规范的Java SE 7版由IcyFenix等同学翻译并发布了出来,请见 http://icyfenix.iteye.com/blog/1256329  

这两个规范以前在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 SpecificationJava 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指令的,因为这条指令的原始规定不便于校验,也不便于编译器的分析,所以被废弃了。如今这条指令终于在规范里也得到明文规定被废弃。 

所以想提醒大家的是,读资料啊文档啊啥的请留意它的原始出处和有效日期。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值