jvm有fullGc 為什么還會出現oom(OutOfMemoryError)


本文摘自 占小狼 文章,本文比喻的很形象;

問題:

既然在觸發full gc的時候,年老代和持久代都會被清理,那么為什么還會出現oom問題?

而且對於強引用,當內存空間不足,java虛擬機寧願拋出oom錯誤,使程序異常終止,也不會靠隨意回收具有強引用的對象來解決內存不足問題;

那么full gc機制的存在有何意義?

還是說fgc主要針對的是駐扎在老年的的軟引用? 既然如此,對於四種引用的方式如何抉擇?總不能所有對象都創建引用隊列使用軟引用或弱引用吧?

R大回復:

這個問題的意思是:

為什么我請了佣人來收拾房間,我的房間還是會堆滿?那我還請佣人來干什么?

他不是號稱能把我房間里的垃圾都清理干凈么?

問題是如果你房間里堆得都是寶貝(或者看起來都是寶貝)的話,佣人也沒轍。

怎么判斷是不是寶貝呢?

就看主人有沒有用手抓着他它---被抓住的寶貝如果有連接到別的寶貝的話那被連接到的也算上。

用例抓住的肯定是寶貝,一點沒碰的肯定不是寶貝,半抓不抓着的先觀望。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM