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 溫少的日志 閱讀(1406) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
           
          主站蜘蛛池模板: 桐梓县| 靖西县| 桦甸市| 化德县| 巢湖市| 张家川| 饶平县| 本溪| 界首市| 临湘市| 长宁县| 泸水县| 陆丰市| 纳雍县| 闻喜县| 任丘市| 尚志市| 盘山县| 巨鹿县| 东兰县| 青阳县| 鸡泽县| 阿瓦提县| 高台县| 定兴县| 久治县| 平南县| 许昌市| 高邑县| 老河口市| 高阳县| 鄢陵县| 炉霍县| 金昌市| 张家界市| 玉田县| 深州市| 黄浦区| 肥城市| 云安县| 渑池县|