4 回答

TA貢獻(xiàn)1858條經(jīng)驗 獲得超8個贊
JVM 只是一個應(yīng)用程序,他說模擬java運行環(huán)境的程序。 jvm 負(fù)責(zé)向操作系統(tǒng)申請內(nèi)存。 首先,jvm會自己管理自己的虛擬內(nèi)存。 但是操作系統(tǒng)會管理 jvm 向操作系統(tǒng)申請的內(nèi)存。 所以,操作系統(tǒng)管理 JVM的內(nèi)存使用和釋放,JVM 管理自己java虛擬機(jī)中的內(nèi)存。

TA貢獻(xiàn)1812條經(jīng)驗 獲得超5個贊
一個完整的Java程序運行過程會涉及以下內(nèi)存區(qū)域:
l 寄存器:JVM內(nèi)部虛擬寄存器,存取速度非常快,程序不可控制。
l 棧:保存局部變量的值,包括:1.用來保存基本數(shù)據(jù)類型的值;2.保存類的實例,即堆區(qū)對象的引用(指針)。也可以用來保存加載方法時的幀。
l 堆:用來存放動態(tài)產(chǎn)生的數(shù)據(jù),比如new出來的對象。注意創(chuàng)建出來的對象只包含屬于各自的成員變量,并不包括成員方法。因為同一個類的對象擁有各自的成員變量,存儲在各自的堆中,但是他們共享該類的方法,并不是每創(chuàng)建一個對象就把成員方法復(fù)制一次。
l 常量池:JVM為每個已加載的類型維護(hù)一個常量池,常量池就是這個類型用到的常量的一個有序集合。包括直接常量(基本類型,String)和對其他類型、方法、字段的符號引用(1)。池中的數(shù)據(jù)和數(shù)組一樣通過索引訪問。由于常量池包含了一個類型所有的對其他類型、方法、字段的符號引用,所以常量池在Java的動態(tài)鏈接中起了核心作用。常量池存在于堆中。
l 代碼段:用來存放從硬盤上讀取的源程序代碼。
l 數(shù)據(jù)段:用來存放static定義的靜態(tài)成員。
添加回答
舉報