Java 堆棧和OOM衷旅、SOF

在介紹堆棧之前簡單說下JVM的內(nèi)存結(jié)構(gòu)捐腿,一共分為虛擬機(jī)棧、堆柿顶、方法區(qū)茄袖、程序計數(shù)器、本地方法棧五個部分:

棧:
?線程私有嘁锯,生命周期和線程生命周期相同宪祥;
?棧由一些列幀組成聂薪;
?每個方法在創(chuàng)建的執(zhí)行的時候都會創(chuàng)建一個棧幀,用來存儲局部變量蝗羊、操作數(shù)棧藏澳、動態(tài)鏈接、方法返回地址等耀找;
?每個方法從調(diào)用到執(zhí)行完畢對應(yīng)一個棧幀在虛擬機(jī)棧中的入棧和出棧

堆:線程共享翔悠,在虛擬機(jī)啟動的時候創(chuàng)建,用來存放對象實例野芒,是GC管理的主要區(qū)域

方法區(qū):線程共享蓄愁,用于存儲已被虛擬機(jī)加載的類信息、類型的常量池狞悲、靜態(tài)變量撮抓、字段和方法信息等

程序計數(shù)器:線程私有,是當(dāng)前線程所執(zhí)行的字節(jié)碼行號指示器效诅,每個線程都有一個獨立的程序計數(shù)器胀滚,字節(jié)碼解釋器工作時通過改變它的值來選取下一條需要執(zhí)行的字節(jié)碼指令。

本地方法棧:線程私有乱投,主要為虛擬機(jī)用到的native方法服務(wù)咽笼,與虛擬機(jī)棧類似

簡單描述下堆棧的各自特點:
比較通俗的講就是棧是用來執(zhí)行程序的,堆主要是用來存放對象的戚炫。棧是一種具有先進(jìn)后出性質(zhì)的數(shù)據(jù)結(jié)構(gòu)剑刑,也就是說后存放的先取出。堆是一種經(jīng)過排序的樹形數(shù)據(jù)結(jié)構(gòu)双肤,每個節(jié)點都有一個值施掏。通常所說的堆的數(shù)據(jù)結(jié)構(gòu)也就是二叉堆。

SOF全稱StackOverFlowError是指棧溢出茅糜,由上面介紹可知棧是義幀為單位保存線程運(yùn)行狀態(tài)的七芭,當(dāng)線程調(diào)用一個方法時JVM會壓入一個新的棧幀到這個線程的棧空間中蔑赘,當(dāng)方法執(zhí)行結(jié)束時棧幀會出棧狸驳,但是在方法執(zhí)行過程中,這個棧幀會一直存在的缩赛。所以如果方法的嵌套調(diào)用層次太多耙箍,隨著棧幀的增加導(dǎo)致總和大于JVM設(shè)置的-Xss值就會拋出StackOverFlowError。

OOM全程OutOfMemoryError 可能分為幾種情況:

堆內(nèi)存溢出:當(dāng)需要為創(chuàng)建的對象實例化分配堆內(nèi)存空間時酥馍,如果此時堆的占用已達(dá)到了設(shè)置的最大值(通過 -Xmx)辩昆,就會拋出OutOfMemoryError

方法區(qū)內(nèi)存溢出:在類加載器加載class文件到內(nèi)存時,JVM會提取類的信息(包括:類名旨袒、訪問修飾符汁针、常量池术辐、字段描述、方法描述等)到方法區(qū)扇丛,而此時如果需要存儲這些類信息但是方法區(qū)的內(nèi)存占用又已達(dá)到最大值术吗,就會拋出OutOfMemoryError

下面給出兩個例子可以看下:

  //堆溢出例子OOM
  public void heapException(){  
      for(;;) {  
          ArrayList list = new ArrayList (2000);  
      }
  }

  //棧溢出例子SOF
  int count = 1;  
  public void stackException(){  
      count++;  
      this.stackException();  
  }  
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市帆精,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌隧魄,老刑警劉巖卓练,帶你破解...
    沈念sama閱讀 212,454評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異购啄,居然都是意外死亡襟企,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評論 3 385
  • 文/潘曉璐 我一進(jìn)店門狮含,熙熙樓的掌柜王于貴愁眉苦臉地迎上來顽悼,“玉大人,你說我怎么就攤上這事几迄∥盗” “怎么了?”我有些...
    開封第一講書人閱讀 157,921評論 0 348
  • 文/不壞的土叔 我叫張陵映胁,是天一觀的道長木羹。 經(jīng)常有香客問我,道長解孙,這世上最難降的妖魔是什么坑填? 我笑而不...
    開封第一講書人閱讀 56,648評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮弛姜,結(jié)果婚禮上脐瑰,老公的妹妹穿的比我還像新娘。我一直安慰自己廷臼,他們只是感情好苍在,可當(dāng)我...
    茶點故事閱讀 65,770評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著中剩,像睡著了一般忌穿。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上结啼,一...
    開封第一講書人閱讀 49,950評論 1 291
  • 那天掠剑,我揣著相機(jī)與錄音,去河邊找鬼郊愧。 笑死朴译,一個胖子當(dāng)著我的面吹牛井佑,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播眠寿,決...
    沈念sama閱讀 39,090評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼躬翁,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了盯拱?” 一聲冷哼從身側(cè)響起盒发,我...
    開封第一講書人閱讀 37,817評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎狡逢,沒想到半個月后宁舰,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,275評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡奢浑,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,592評論 2 327
  • 正文 我和宋清朗相戀三年蛮艰,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片雀彼。...
    茶點故事閱讀 38,724評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡壤蚜,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出徊哑,到底是詐尸還是另有隱情袜刷,我是刑警寧澤,帶...
    沈念sama閱讀 34,409評論 4 333
  • 正文 年R本政府宣布实柠,位于F島的核電站水泉,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏窒盐。R本人自食惡果不足惜草则,卻給世界環(huán)境...
    茶點故事閱讀 40,052評論 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蟹漓。 院中可真熱鬧炕横,春花似錦、人聲如沸葡粒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽嗽交。三九已至卿嘲,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間夫壁,已是汗流浹背拾枣。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人梅肤。 一個月前我還...
    沈念sama閱讀 46,503評論 2 361
  • 正文 我出身青樓司蔬,卻偏偏與公主長得像,于是被迫代替她去往敵國和親姨蝴。 傳聞我的和親對象是個殘疾皇子俊啼,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,627評論 2 350

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

  • JVM內(nèi)存模型Java虛擬機(jī)(Java Virtual Machine=JVM)的內(nèi)存空間分為五個部分,分別是: ...
    光劍書架上的書閱讀 2,493評論 2 26
  • 從三月份找實習(xí)到現(xiàn)在左医,面了一些公司授帕,掛了不少,但最終還是拿到小米炒辉、百度豪墅、阿里、京東黔寇、新浪、CVTE斩萌、樂視家的研發(fā)崗...
    時芥藍(lán)閱讀 42,218評論 11 349
  • 一缝裤、運(yùn)行時數(shù)據(jù)區(qū)域 Java虛擬機(jī)管理的內(nèi)存包括幾個運(yùn)行時數(shù)據(jù)內(nèi)存:方法區(qū)、虛擬機(jī)棧颊郎、本地方法棧憋飞、堆、程序計數(shù)器姆吭,...
    加油小杜閱讀 1,514評論 1 15
  • 整理來自互聯(lián)網(wǎng) 1榛做,JDK:Java Development Kit,java的開發(fā)和運(yùn)行環(huán)境内狸,java的開發(fā)工具...
    Ncompass閱讀 1,537評論 0 6
  • 好殘酷的冬天 南方姑娘在陽臺上嘟囔風(fēng)有點大 吹亂了頭發(fā) 北方凍死了人
    NixNa閱讀 146評論 0 1