首頁技術文章正文

JVM字節(jié)碼文件有哪些核心組成部分?

更新時間:2023-10-11 來源:黑馬程序員 瀏覽量:

JVM全稱是Java Virtual Machine,中文譯名Java虛擬機,是一個運行在計算機上的程序,他的職責是運行Java字節(jié)碼文件。字節(jié)碼文件能解決開發(fā)執(zhí)行中的版本沖突和系統(tǒng)升級問題。將字節(jié)碼文件中的指令解釋成機器碼,同時使用即時編譯器優(yōu)化性能。

字節(jié)碼文件的核心組成部分如下:

基本信息:魔數(shù)、字節(jié)碼文件對應的Java版本號、訪問標識(public final等等),父類和接口。

常量池:保存了字符串常量、類或接口名、字段名主要在字節(jié)碼指令中使用。

字段:當前類或接口聲明的字段信息。

方法:當前類或接口聲明的方法,信息字節(jié)碼指令。

屬性:類的屬性,比如源碼的文件名內(nèi)部類的列表等。

Magic魔數(shù)

文件是無法通過文件擴展名來確定文件類型的,文件擴展名可以隨意修改,不影響文件的內(nèi)容。軟件使用文件的頭幾個字節(jié)(文件頭)去校驗文件的類型,如果軟件不支持該種類型就會出錯。Java字節(jié)碼文件中,將文件頭稱為magic魔數(shù)。

Magic魔數(shù)

主副版本號

主副版本號指的是編譯字節(jié)碼文件的JDK版本號,主版本號用來標識大版本號,JDK1.0-1.1使用了45.0-45.3,JDK1.2是46之后每升級一個大版本就加1;副版本號是當主版本號相同時作為區(qū)分不同版本的標識,一般只需要關心主版本號。版本號的作用主要是判斷當前字節(jié)碼的版本和運行時的JDK是否兼容。

1697008321122_2.png

使用JDK8編譯的字節(jié)碼文件

常量池

字節(jié)碼文件中常量池的作用:避免相同的內(nèi)容重復定義,節(jié)省空間。

常量池

常量池中的數(shù)據(jù)都有一個編號,編號從1開始。在字段或者字節(jié)碼指令中通過編號可以快速的找到對應的數(shù)據(jù)。字節(jié)碼指令中通過編號引用到常量池的過程稱之為符號引用。

符號引用

方法

字節(jié)碼中的方法區(qū)域是存放字節(jié)碼指令的核心位置,字節(jié)碼指令的內(nèi)容存放在方法的Code屬性中。

字節(jié)碼方法區(qū)域

操作數(shù)棧是臨時存放數(shù)據(jù)的地方,局部變量表是存放方法中的局部變量的位置。

局部變量

輸入字節(jié)碼指令,局部變量表執(zhí)行的操作如下:

1697012299436_7.png


分享到:
在線咨詢 我要報名
和我們在線交談!