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

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


          網站導航:
           
           
          主站蜘蛛池模板: 泸定县| 长乐市| 宁德市| 仪陇县| 应城市| 和平区| 缙云县| 荣昌县| 云梦县| 徐州市| 襄城县| 安多县| 吴忠市| 四会市| 建阳市| 北京市| 荥经县| 赤峰市| 息烽县| 榆中县| 海宁市| 象州县| 井陉县| 淳安县| 长寿区| 鸡泽县| 屯留县| 尤溪县| 陆川县| 张掖市| 新晃| 泗水县| 安阳市| 象州县| 永泰县| 陈巴尔虎旗| 漳浦县| 收藏| 黄平县| 德兴市| 四平市|