Java位元組碼結構剖析一 常量池

2021-09-01 11:17:15 字數 515 閱讀 1878

這篇部落格開始,我打算帶大家去解讀一下jvm平台下的位元組碼檔案(熟悉而又陌生的感覺)。眾所周知,class檔案包含了我們定義的類或介面的資訊。然後位元組碼又會被jvm載入到記憶體中,供jvm使用。那麼,類資訊到了位元組碼檔案裡,它們如何表示的,以及在位元組碼裡是怎麼分布的呢?帶著這些問題,讓我們去深入了解位元組碼檔案吧。

class檔案的結構

class檔案是一組以8位位元組為基礎單位的二進位製流,各個資料專案嚴格按照順序緊湊地排列在class檔案之中,中間沒有新增任何分隔符,這使得整個class檔案中儲存的內容幾乎全部是程式執行的必要資料,沒有空隙存在。當遇到需要占用8位位元組以上空間地資料項時,則會按照高位在前的方式分割成若干個8位位元組進行儲存。

每乙個 class 檔案對應於乙個如下所示的 classfile 結構體。

classfile
這種資料結構,類似c語言結構體。這個結構體中只有兩種資料型別:無符號數和表,後面的解析都要以這兩種資料型別為基礎,所以這裡要先介紹這兩個概念。

java 位元組碼 byte

1.string 轉 byte byte midbytes isostring.getbytes utf8 為utf8編碼 byte isoret srt2.getbytes iso 8859 1 為 iso 8859 1編碼 其中 iso 8859 1為單位元組的編碼 2.byte轉string ...

位元組碼與常量池和JVM記憶體原理

1.jvm主要包括了圖中的三塊,分別是方法區,堆,以及執行緒獨有的區域。2.其中方法區中包括了類變數,類資訊,方法資訊以及常量池。1.常量池以表的形式存在 2.常量池用於儲存編譯期間生成的字面量和符號引用。值得注意的是,執行期間產生的新的常量也可被儲存到常量池中,例如string中的intern方法...

位元組碼整體結構和資料結構

1,magic number 魔數 4個位元組,值為oxcafebabe 2,version 版本號 2 2個位元組 3,constant pool 常量池 2 n個位元組 4,access flags訪問標誌資訊,包括該class檔案是類還是介面,是否被定義為public,是否是abstract和...