Java虛擬機(jī)

JVM是Java Virtual Machine(Java虛擬機(jī))的縮寫,JVM是一種用于計(jì)算設(shè)備的規(guī)范,它是一個虛構(gòu)出來的計(jì)算機(jī),是通過在實(shí)際的計(jì)算機(jī)上仿真模擬各種計(jì)算機(jī)功能來實(shí)現(xiàn)的。

引入Java語言虛擬機(jī)后,Java語言在不同平臺上運(yùn)行時不需要重新編譯。Java語言使用Java虛擬機(jī)屏蔽了與具體平臺相關(guān)的信息,使得Java語言編譯程序只需生成在Java虛擬機(jī)上運(yùn)行的目標(biāo)代碼(字節(jié)碼),就可以在多種平臺上不加修改地運(yùn)行。

跨平臺,jvm 從軟件層面屏蔽不同操作系統(tǒng)在底層硬件與指令上的區(qū)別


jvm內(nèi)存模型.png

堆:存儲對象
棧(線程):分配棧幀空間,方法局部變量、操作數(shù)棧(分配變量被賦值的值的空間)、動態(tài)鏈接、方法出口

  • 棧幀(Stack Frame)是虛擬機(jī)運(yùn)行時數(shù)據(jù)區(qū)中的虛擬機(jī)棧(Virtual Machine Stack) 的棧元素。棧幀存儲了方法的局部變量表、操作數(shù)棧、動態(tài)連接和方法返回地址等信息。每一個方法從調(diào)用開始至執(zhí)行完成的過程,都對應(yīng)著一個棧幀在虛擬機(jī)棧里面從入棧到出棧的過程。
  • 操作數(shù)棧:當(dāng)一個方法剛剛開始執(zhí)行的時候,這個方法的操作數(shù)棧是空的,在方法的執(zhí)行過程中,會有各種字節(jié)碼指令往操作數(shù)棧中寫入和提取內(nèi)容,也就是出棧/入棧操作。例如,在做算術(shù)運(yùn)算的時候是通過操作數(shù)棧來進(jìn)行的,又或者在調(diào)用其他方法的時候是通過操作數(shù)棧來進(jìn)行參數(shù)傳遞的

程序計(jì)數(shù)器:每個線程執(zhí)行時都會生成一個程序計(jì)數(shù)器,當(dāng)一個線程被掛起,又開始執(zhí)行時,根據(jù)程序計(jì)數(shù)器的code,繼續(xù)執(zhí)行
方法區(qū):常量、靜態(tài)變量、類信息
本地方法棧:被native修飾的方法

public class Test3 {
    
    public int compute() {
        int a = 1;
        int b = 2;
        int c = a + b;
        return c;
    }

    public static void main(String[] args) {
        Test3 test = new Test3();
        int result = test.compute();
        System.out.println(result);
    }
}
運(yùn)行

參考jvm指令手冊

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

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