java的垃圾回收#OutOfMemoryError異常

在各個運行時區(qū)域中叠殷,除了程序計數(shù)器,其他存儲區(qū)都有可能發(fā)生OutOfMemoryError異常

Java堆溢出

  • Java堆內(nèi)存的OOM異常是實際應(yīng)用中常見的內(nèi)存溢出異常情況碱璃。當出現(xiàn)Java堆內(nèi)存溢出時菩鲜,異常堆棧信息“java.lang.OutOfMemoryError”會跟著進一步提示“Java heapspace”
  • 要解決這個區(qū)域的異常淋样,一般的手段是先通過內(nèi)存映像分析工具(如Eclipse Memory Analyzer)對Dump出來的堆轉(zhuǎn)儲快照進行分析作岖,重點是確認內(nèi)存中的對象是否是必要的唆垃,也就是要先分清楚到底是出現(xiàn)了內(nèi)存泄漏(Memory Leak)還是內(nèi)存溢出(Memory Overflow)
  • 如果是內(nèi)存泄露,可進一步通過工具查看泄露對象到GCRoots的引用鏈痘儡。于是就能找到泄露對象是通過怎樣的路徑與GC Roots相關(guān)聯(lián)并導(dǎo)致垃圾收集器無法自動回收它們的
  • 如果不存在泄露辕万,換句話說,就是內(nèi)存中的對象確實都還必須存活著沉删,那就應(yīng)當檢查虛擬機的堆參數(shù)(-Xmx與-Xms)渐尿,與機器物理內(nèi)存對比看是否還可以調(diào)大,從代碼上檢查是否存在某些對象生命周期過長矾瑰、持有狀態(tài)時間過長的情況砖茸,嘗試減少程序運行期的內(nèi)存消耗

虛擬機棧和本地方法棧溢出

  • 如果線程請求的棧深度大于虛擬機所允許的最大深度,將拋出StackOverflowError異常
  • 如果虛擬機在擴展棧時無法申請到足夠的內(nèi)存空間殴穴,則拋出OutOfMemoryError異常

方法區(qū)和運行時常量池溢出

  • String.intern()是一個Native方法凉夯,它的作用是:如果字符串常量池中已經(jīng)包含一個等于此String對象的字符串,則返回代表池中這個字符串的String對象采幌;否則劲够,將此String對象包含的字符串添加到常量池中,并且返回此String對象的引用
  • 在JDK1.6及之前的版本中休傍,由于常量池分配在永久代內(nèi)征绎,我們可以通過-XX:PermSize和-XX:MaxPermSize限制方法區(qū)大小,從而間接限制其中常量池的容量
  • 在JDK 1.6中磨取,intern()方法會把首次遇到的字符串實例復(fù)制到永久代中人柿,返回的也是永久代中這個字符串實例的引用,而由String-Builder創(chuàng)建的字符串實例在Java堆上寝衫,所以必然不是同一個引用顷扩,將返回false。而JDK 1.7(以及部分其他虛擬機慰毅,例如JRockit)的intern()實現(xiàn)不會再復(fù)制實例隘截,只是在常量池中記錄首次出現(xiàn)的實例引用,因此intern()返回的引用和由String-Builder創(chuàng)建的那個字符串實例是同一個
  • 運行時常量池溢出汹胃,在Out-OfMemoryError后面跟隨的提示信息是“PermGen space”婶芭,說明運行時常量池屬于方法區(qū)(HotSpot虛擬機中的永久代)的一部分
  • 方法區(qū)溢出也是一種常見的內(nèi)存溢出異常,一個類要被垃圾收集器回收掉着饥,判定條件是比較苛刻的

本機直接內(nèi)存溢出

  • 由DirectMemory導(dǎo)致的內(nèi)存溢出犀农,一個明顯的特征是在Heap Dump文件中不會看見明顯的異常,如果讀者發(fā)現(xiàn)OOM之后Dump文件很小宰掉,而程序中又直接或間接使用了NIO呵哨,那就可以考慮檢查一下是不是這方面的原因
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末赁濒,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子孟害,更是在濱河造成了極大的恐慌拒炎,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件挨务,死亡現(xiàn)場離奇詭異击你,居然都是意外死亡,警方通過查閱死者的電腦和手機谎柄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進店門丁侄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人朝巫,你說我怎么就攤上這事鸿摇。” “怎么了捍歪?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵户辱,是天一觀的道長。 經(jīng)常有香客問我糙臼,道長,這世上最難降的妖魔是什么恩商? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任变逃,我火速辦了婚禮,結(jié)果婚禮上怠堪,老公的妹妹穿的比我還像新娘揽乱。我一直安慰自己,他們只是感情好粟矿,可當我...
    茶點故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布凰棉。 她就那樣靜靜地躺著,像睡著了一般陌粹。 火紅的嫁衣襯著肌膚如雪撒犀。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天掏秩,我揣著相機與錄音或舞,去河邊找鬼。 笑死蒙幻,一個胖子當著我的面吹牛映凳,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播邮破,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼诈豌,長吁一口氣:“原來是場噩夢啊……” “哼仆救!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起矫渔,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤派桩,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后蚌斩,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體铆惑,經(jīng)...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年送膳,在試婚紗的時候發(fā)現(xiàn)自己被綠了员魏。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,779評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡叠聋,死狀恐怖撕阎,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情碌补,我是刑警寧澤,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布厦章,位于F島的核電站镇匀,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏袜啃。R本人自食惡果不足惜汗侵,卻給世界環(huán)境...
    茶點故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望群发。 院中可真熱鬧晰韵,春花似錦、人聲如沸熟妓。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽起愈。三九已至只恨,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間告材,已是汗流浹背坤次。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留斥赋,地道東北人缰猴。 一個月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像疤剑,于是被迫代替她去往敵國和親滑绒。 傳聞我的和親對象是個殘疾皇子闷堡,可洞房花燭夜當晚...
    茶點故事閱讀 44,700評論 2 354

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