java內存分區 jdk1.7之前

1、堆

基本所有對象都在堆上被創建,而對象的聲明在棧中,它存着堆上的引用。例如 Object object = new Object();

object爲對象的聲明,存在虛擬機棧裏面,新建的object對象存在於堆上面,包括類的成員變量。


2、虛擬機棧

虛擬機棧是線程私有的,不會出現線程安全問題,在sun公司提供的hotspot中和本地方法棧爲一個棧,每次調用方法需要執行一個Frame(幀棧)的入棧到出棧的過程,每一個棧幀都有自己的局部變量表、操作數棧、返回地址和指向運行時常量池的引用。


3、本地方法棧

和虛擬機棧是一樣的,只是裏面執行的是jvm本地方法,申明爲native的方法。


4、程序計數器

記錄了每一個線程當前執行的代碼行,線程私有的。


5、方法區(非堆)

jdk7版本:存的是類型信息,包括class被加載後的類名,屬性,方法,靜態變量等

jdk8版本:移除永久代,相當於把方法區變成了放在元空間中進行類的加載,靜態成員變量和常量池移動至java堆中。



6、常量池(方法區裏面)

存的是final的值,常量,就是在編譯的時候就已經確定的值。


7、關於線程安全問題


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