對象分配內(nèi)存

對象的內(nèi)存分配,大方向上是在對上分配(也可能經(jīng)過JIT編譯后拆散為標(biāo)量類型并間接地在棧上分配),對象主要分配在新生代的Eden區(qū),如果啟動了本地線程分配緩沖(TLAB),將按線程優(yōu)先分配在TLAB上。少數(shù)情況下直接分配在老年代。

Serial、Serial Old收集器下:

對象優(yōu)先在Eden區(qū)分配,當(dāng)Eden區(qū)沒有足夠的空間進行分配時,將發(fā)起一次Minor GC。

-XX:PrintGCDetails--收集日志參數(shù),在垃圾收集時打印內(nèi)存回收日志,且在進程退出時輸出當(dāng)前的內(nèi)存各區(qū)域分配情況。

大對象(大量連續(xù)內(nèi)存空間的對象,例很長的字符串以及數(shù)組)直接進入老年代
-XX:PretenureSizeThreshold--令大于這個設(shè)置值的對象在老年代分配。只對Serial和ParNew生效。

長期存活對象進入老年代。
虛擬機給每個對象定義一個對象年齡器。在Eden的對象,在經(jīng)過第一次Minor GC后仍然存在,并且可被Survivor容納的話,將被移動到Survivor空間中,對象年齡設(shè)為1。每熬過一次Minor GC,年齡+1。
-XX:MaxTenuringThreshold--對象晉升老年代的年齡閾值。默認為15。

Survivor空間中相同年齡所有對象大小總和大于Survivor空間的一半,年齡大于或等于該年齡的對象就可以直接進入老年代,無須等到MaxTenuringThreshold中要求的年齡。

Minor GC之前,虛擬機先檢查老年代最大可用的連續(xù)空間是否大于新生代所有對象空間之和。如果不大于且HandlePromotionFailure允許擔(dān)保的話,會繼續(xù)查看老年代最大可用的連續(xù)空間是否大于晉升到老年代對象的平均大小,如果大于則進行Minor GC。否則進行Full GC。
JDK 1.6 Update 24之后,HandlePromotionFailure失效。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容