JVM內存管理之內存結構

JVM在運行java程序時,將他們劃分成幾種不同格式的數據,分別存儲在不同的區域,這些數據統一稱爲運行時數據。主要分爲以下6種存儲結構。

1、PC寄存器數據;
2、Java棧;
3、堆;
4、方法區;
5、本地方法區;
6、運行時常量;

一:PC寄存器

pc寄存器用於保存當前正常執行的程序的內存地址。
java程序是多線程執行的,當對個線程交叉執行時,被中斷線程的程序當前執行到那條地址的內存地址必然要保存下來,以便於他被恢復時再按照中斷時的指令地址繼續執行下去

二:Java棧

java棧是和線程關聯在一起的,每創建一個java線程,JVM就會爲這個線程創建一個對應的棧,在java棧中會有多個棧,棧針是和方法關聯起來的。棧針中會包含一些內部變量,操作棧和方法返回值等信息。
java棧的棧頂的棧針是當前正在執行的活動棧,也就是當前正在執行的方法,PC寄存器會指向這個地址。當這個棧針中調用另一個方法是,這個棧針將被壓棧新的棧針將被放到棧的頂部,變爲活動棧,當這個棧中的指令執行完成時,這個棧針將被彈出,下一個棧針將變爲活動棧,上一個棧針的返回值將變爲這個棧的變量使用。

三:堆

堆是存儲java對象的地方,它是JVM管理Java對象的核心存儲區域。堆是被所有java線程共享的,所以對他的訪問需要注意同步問題,方法和對應的屬性都需要保證一致性。

四:方法區

JVM方法區是用於存儲類結構信息的地方,當類被加載到JVM時,會被存儲在不同的數據結構中,包括常量池,域,,方法數據,方法體,構造函數,包括類中的專用方法,實例初始化,接口初始化,等。

五:運行時常量池

六:本地方法棧

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章