Java內存分配

http://www.linuxidc.com/upload/2011_05/110526130734411.gif

jvm體系結構

jvm內存分區

1    程序計數器

程序計數器是當前線程所執行字節碼的行號指示器,所以它是私有的。

如果線程執行的是非native方法,則程序計數器中保存的是當前需要執行的指令的地址;如果線程執行的是native方法,則程序計數器中的值是undefined

程序計數器是不會發生內存溢出現象(OutOfMemory)的。

 2    Java棧(Java虛擬機棧)

Java棧與線程的生命週期相同,java棧中存放的是一個個棧幀。棧幀中存放的是局部變量表、操作數棧、指向運行時常量池的引用、方法返回值地址和附加信息。也就是當jvm創建一個線程時,Java棧也隨之創建(因此它也是線程私有),線程執行一個方法時就會創建一個棧與之對應的幀並壓入棧中,方法執行結束,棧幀出棧。

 局部變量表:這裏面存放的是方法中的局部變量(方法中聲明的非靜態變量以及形參和returnAddress類型)。局部變量表的大小在編譯時期就完成分配,方法運行期間大小不會改變。

 3    本地方法棧

Native方法服務。

 4    Java

虛擬機啓動時創建,線程共享,用於存儲數組以及對象。

-Xmx-Xms控制)

 5    方法區(非堆)

存儲常量、靜態變量、已經被虛擬機加載的類信息(包括類的名稱、方法信息、字段信息)等。

(對應JVM內存配置中的-PermSize等)

發佈了24 篇原創文章 · 獲贊 3 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章