Java SE 6.0的改变包括了ClassFile格式的改变。

新的版本的ClassFile中major_version为0x0032,也就是50。
Java SE 6 : 0x0032   (用自己写的ClassFileParser分析过证实)
Java SE 5 : 0x0031  (用自己写的ClassFileParser分析过证实)
JDK 1.4   : (未经证实是0x0030) 
JDK 1.3   :  (未经证实是0x002F)
JDK 1.2   : 0x002E
JDK 1.1   : 0x002D  

每次JDK大版本升级,ClassFile格式都改变,然后版本加1。

6.0增加了StackMapTable的Attribute。

要提一下三个byte code处理库:
ObjectWeb ASM
Apache BCEL
sourceforge SERP

ASM目前版本为3.0。其2.1版本开始支持StackMapTableAttribute。
其中ASM 2.1支持StackMapTableAttribute,BCEL 5.2似乎只支持JDK 1.3,SERP 1.12只支持JDK 5.0。

Aapche BCEL支持JDK 1.3,是从代码中猜测的,没有从文档中看到,但其中5.2版本的ClassParser的确是不支持StackMapTable Attribute,其代码中的StackMap和Java SE 6.0的StackMapTable Attribute没有任何关系。BCEL中的对象和ClassFile中的各项对应,用于学习分析方便。

ASM号称更小,速度更快。现在流行的Eclipse插件bytecode outline也是其中的子项目。

ASM可以直接cvs访问,提供的代码是一个Eclipse Project,十分方便,我很喜欢!
http://forge.objectweb.org/projects/asm/

在规范4.10.1中的这一段话有些疑问:
If the class file version number is 51.0 or above, then neither the jsr opcode or the jsr_w opcode may appear in the code array.
class file version number is 51.0 or above,什么意思?Java SE 6.0编译出俩的结果应该是50.x,这是怎么回事?

规范是一个186页的PDF,没有文档大纲,看晕了


posted on 2006-11-26 02:54 温少的日志 阅读(1394) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航: