我知道當 Age 大于 MaxTenuringThreshold 時,長期幸存者將進入老年代。但是我讀過的一本書說,也是當幸存者空間中相同年齡的所有對象的大小大于幸存者空間的一半時.所以問題是這個幸存者空間是SO還是S0 + S1?為什么不是 Eden + S0 或 S1?
1 回答

UYOU
TA貢獻1878條經驗 獲得超4個贊
該圖有點偏離 - 永久代不存在于堆中,而是存在于非堆空間中: https ://blogs.oracle.com/jonthecollector/presenting-the-permanent-generation
為了回答您的問題,年輕一代由以下人員組成:
伊甸園
S0 + S1(統稱為幸存者空間)。
堆中的對象有一定程度的“提升”,如下所示:`
伊甸園 -> S0 -> S1 -> 老一代(或終身)。
新的 Java 對象在 Eden 中創建,它具有固定的分配大小。自然會有Eden滿的時候,會發生一輪Minor GC。仍然引用的對象將被提升到幸存者空間。隨著每個次要 GC 的發生,對象將圍繞 S0 和 S1 交換。
根據該對象存活的 GC 次數,它最終會被提升為老年代。當然,也會有老年代空間滿的時候。然后將進行一次主要的 GC 以清理未引用的對象。
讀一讀: https ://www.oracle.com/webfolder/technetwork/tutorials/obe/java/gc01/index.html
添加回答
舉報
0/150
提交
取消