03 java字節(jié)碼文件

java源碼經(jīng)過編譯,生成class字節(jié)碼文件,JVM加載class文件執(zhí)行。字節(jié)碼文件將java語言與JVM解耦,除java語言外Groovy、JRuby、Jython、Scala均可生成字節(jié)碼文件,運動到j(luò)ava虛擬機上?,F(xiàn)在了解下字節(jié)碼文件結(jié)構(gòu)。

字節(jié)碼文件數(shù)據(jù)結(jié)構(gòu)

無符號數(shù):u1、u2、u4、u8 來分別代表 1 個字節(jié)、2 個字節(jié)、4 個字節(jié)和 8 個字節(jié)的無符號數(shù)

表:多個無符號數(shù)或者其他表作為數(shù)據(jù)項構(gòu)成的復合數(shù)據(jù)類型,class文件中所有的表都以“_info”結(jié)尾

class文件結(jié)構(gòu)


魔數(shù): 0XCAFEBABE

版本號:前兩個字節(jié)代表次版本號,后兩個字節(jié)主版本號

常量池:存放類各種信息的表,每一項是一個表,常量池內(nèi)部的表中也有相互之間的引用,前兩個字節(jié)為計數(shù)器,后面為各種表。

訪問標志:兩個字節(jié),定義類或者接口,public或者private,abstract或者final等。

類索引、父類索引、接口索引計數(shù)器、接口索引:所謂索引,即常量池中的第幾項,兩個字節(jié),會指向常量池中的類/接口引用表。

字段表:類級別變量以及實例變量,包含字段計數(shù)器以及各個字段表。

方法表:計數(shù)器以及各個方法表

屬性表:無固定格式,典型如Code類型屬性表,為字節(jié)碼指令,字段表及方法表中會有屬性表

編譯插樁

可分為兩類

  1. APT(Annotation Process Tools) :用于生成 Java 代碼
  2. AOP(Aspect Oriented Programming):用于操作字節(jié)碼
    熟悉了class文件結(jié)構(gòu),就可以通過AOP記性編譯插樁,目前主要有兩種框架:AspectJ、ASM
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容