簡單解釋
記憶體分配的一種機制,Young區空間容納不了物件時會把物件放到Old區,所以稱之為Old區給Young區的空間做擔保,繼續聯想,,,,java堆記憶體會使用誰來做空間擔保呢?
官方解釋
在發生Minor GC之前,虛擬機必須先檢查老年代最大可用的連續空間是否大于新生代所有物件總 空間,如果這個條件成立,那這一次Minor GC可以確保是安全的,如果不成立,則虛擬機會先查看- XX:HandlePromotionFailure引數的設定值是否允許擔保失敗(Handle Promotion Failure);如果允 許,那會繼續檢查老年代最大可用的連續空間是否大于歷次晉升到老年代物件的平均大小,如果大 于,將嘗試進行一次Minor GC,盡管這次Minor GC是有風險的;如果小于,或者-XX: HandlePromotionFailure設定不允許冒險,那這時就要改為進行一次Full GC,
---- 《深入理解java虛擬機》
偽代碼
if(老年代最大可用的連續空間 < 新生代所有物件的總空間) {
if(HandlePromotionFailure == true) {
if(老年代最大可用連續空間 > 歷次晉升到老年代的物件的平均大小) {
YGC(); // 嘗試進行一次 YGC,但這次 YGC 依然是有風險的
} else {
FGC();
}
} else {
FGC();
}
} else {
YGC(); // 此次 YGC 安全
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/141410.html
標籤:Java
上一篇:Java面試題匯總(持續更新)
