JVM內(nèi)存區(qū)域的一些理解

JAVA的JVM內(nèi)存空間分為三個(gè)重要區(qū)域:堆杭隙、棧和方法區(qū)

image.png

棧區(qū)

線程私有。每個(gè)線程有自己的棧區(qū)因妙,棧中只保存了方法中的局部變量數(shù)據(jù)痰憎,包括了局部變量的基礎(chǔ)數(shù)據(jù)類型和對象實(shí)例的引用。

  • 更具體地說攀涵,在線程私有區(qū)的虛擬機(jī)棧中铣耘,會在每個(gè) Java 方法執(zhí)行的同時(shí)創(chuàng)建一個(gè)棧幀用于存儲局部變量表、操作數(shù)棧以故、常量池引用等信息

棧中數(shù)據(jù)都是私有的蜗细,其他棧不可以訪問

通過下面代碼,觀察棧中是否有分配對象內(nèi)存

public class ClassA{
     public int arg;
     public ClassA(int arg) {
         this.arg = arg;
     }

     @Override
     protected void finalize() throws Throwable {
         System.out.println("對象即將被銷毀: " + this + "; arg = " + arg);
         super.finalize();
     }
 }
 
 
 public class TestCase1 {
     public static ClassA getClassA(int arg) {
         ClassA a = new ClassA(arg);
         System.out.println("getA() 方法內(nèi):" + a);
         return a;
     }
 
     public static void foo() {
         ClassA a = new ClassA(2);
         System.out.println("foo() 方法內(nèi):" + a);
     }
 
 
     public static void main(String[] args) {
         ClassA classA = getClassA(1);
         System.out.println("main() 方法內(nèi):" + classA);
 
         foo();
     }
 
 }

結(jié)果:

getA() 方法內(nèi):bean.ClassA@2503dbd3
main() 方法內(nèi):bean.ClassA@2503dbd3
foo() 方法內(nèi):bean.ClassA@4b67cf4d

沒有調(diào)用finalize方法怒详,可以說明foo()實(shí)例化的對象沒有隨著foo()方法的出棧而銷毀炉媒,即foo()方法內(nèi)實(shí)例化的局部對象并沒有分配內(nèi)存在棧上

堆區(qū):

JVM中有句關(guān)于堆的解釋

The heap is the runtime data area from which memory for all class instances and arrays is allocated踪区。
堆是所有的對象實(shí)例以及數(shù)組分配內(nèi)存的運(yùn)行時(shí)數(shù)據(jù)區(qū)域。

所有線程共享橱野。存儲了全部的對象實(shí)例朽缴,即所有的對象都在這里分配內(nèi)存。而每個(gè)實(shí)例都有一個(gè)與之對應(yīng)的class信息存到方法區(qū)中水援。

堆中存放的對象本身密强,包括了成員變量和局部變量,除此外還有成員變量的引用和成員變量的基本數(shù)據(jù)類型蜗元。

方法區(qū):

所有線程共享或渤。用于存儲被虛擬機(jī)加載的類信息、常量奕扣、靜態(tài)變量薪鹦、即時(shí)編譯器編譯后的代碼等數(shù)據(jù)。

虛擬機(jī)把它當(dāng)成永久代來進(jìn)行垃圾回收惯豆。但很難確定永久代的大小池磁,因?yàn)樗艿胶芏嘁蛩赜绊懀⑶颐看?Full GC 之后永久代的大小都會改變楷兽,所以經(jīng)常會拋出 OutOfMemoryError 異常地熄。為了更容易管理方法區(qū),從 JDK 1.8 開始芯杀,移除永久代端考,并把方法區(qū)移至元空間,它位于本地內(nèi)存中揭厚,而不是虛擬機(jī)內(nèi)存中却特。

參考資料

CyC2018 CS-Notes JAVA虛擬機(jī)
Java是否可以棧上分配對象內(nèi)存? 為什么?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末筛圆,一起剝皮案震驚了整個(gè)濱河市裂明,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌太援,老刑警劉巖漾岳,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異粉寞,居然都是意外死亡尼荆,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進(jìn)店門唧垦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來捅儒,“玉大人,你說我怎么就攤上這事∏苫梗” “怎么了鞭莽?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長麸祷。 經(jīng)常有香客問我澎怒,道長,這世上最難降的妖魔是什么阶牍? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任喷面,我火速辦了婚禮,結(jié)果婚禮上走孽,老公的妹妹穿的比我還像新娘惧辈。我一直安慰自己,他們只是感情好磕瓷,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布盒齿。 她就那樣靜靜地躺著,像睡著了一般困食。 火紅的嫁衣襯著肌膚如雪边翁。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天硕盹,我揣著相機(jī)與錄音符匾,去河邊找鬼。 笑死莱睁,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的芒澜。 我是一名探鬼主播仰剿,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼痴晦!你這毒婦竟也來了南吮?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤誊酌,失蹤者是張志新(化名)和其女友劉穎部凑,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體碧浊,經(jīng)...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡涂邀,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了箱锐。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片比勉。...
    茶點(diǎn)故事閱讀 39,834評論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出浩聋,到底是詐尸還是另有隱情观蜗,我是刑警寧澤,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布衣洁,位于F島的核電站墓捻,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏坊夫。R本人自食惡果不足惜砖第,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望践樱。 院中可真熱鬧厂画,春花似錦、人聲如沸拷邢。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽瞭稼。三九已至忽洛,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間环肘,已是汗流浹背欲虚。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留悔雹,地道東北人复哆。 一個(gè)月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像腌零,于是被迫代替她去往敵國和親梯找。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 第6章類文件結(jié)構(gòu) 6.1 概述 6.2 無關(guān)性基石 6.3 Class類文件的結(jié)構(gòu) java虛擬機(jī)不和包括java...
    kennethan閱讀 931評論 0 2
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對...
    cosWriter閱讀 11,101評論 1 32
  • 第二部分 自動內(nèi)存管理機(jī)制 第二章 java內(nèi)存異常與內(nèi)存溢出異常 運(yùn)行數(shù)據(jù)區(qū)域 程序計(jì)數(shù)器:當(dāng)前線程所執(zhí)行的字節(jié)...
    小明oh閱讀 1,164評論 0 2
  • 1.概述 對于 Java 的開發(fā)者來說益涧,在虛擬機(jī)的自動內(nèi)存管理機(jī)制的幫助下锈锤,不再需要為每一個(gè) new 操作去寫配對...
    SawyerZh閱讀 3,169評論 3 81
  • 這篇文章是我之前翻閱了不少的書籍以及從網(wǎng)絡(luò)上收集的一些資料的整理,因此不免有一些不準(zhǔn)確的地方闲询,同時(shí)不同JDK版本的...
    高廣超閱讀 15,601評論 3 83