GC 和 Full GC 有什么區別?


GC(或Minor GC):收集 生命周期短的區域(Young area)。

Full GC (或Major GC):收集生命周期短的區域(Young area)和生命周期比較長的區域(Old area)對整個堆進行垃圾收集。

他們的收集算法不同,所以使用的時間也不同。

Minor GC后,Eden是空的嗎?

是的,Minor GC會把Eden中的所有活的對象都移到Survivor區域中,如果Survivor區中放不下,那么剩下的活的對象就被移到Old generation 中。

GC 效率也會比較高,我們要盡量減少 Full GC 的次數。 當顯示調用System.gc() 時,gc does a full collection(both young generation and tenured generation).

顯式調用system.gc()會觸發full gc,對象在Eden出生每經歷一次MInor GC后仍然存活,並且能被Survivor容納,就會被移動到Survivor,

並設定年齡為1.以后在Survivor每"熬過"一次Minor GC,年齡就增加一歲,當年齡超過一定值就被移動到老年代,MaxTenuringThreshold用於設置年齡閾值,但是如果Survivor空間中相同年齡所有對象大小的總和大於Survivor空間的一半,

年齡大於或等於該年齡的對象就可以直接進入老年代,無須等到MaxTenuringThreshold中要求的年齡。

大對象直接進入老年代,比如長數組或長字符串,-XX:PretenureSizeThreshold用於設置大於這個值直接在老年代分配。

 


免責聲明!

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



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