在 G1 垃圾回收器中,Mixed GC 和 Young GC 的區別主要體現在以下幾個方面:
- 作用范圍
- Young GC:僅針對年輕代中的Region進行回收,包括 Eden 區和 Survivor 區的 Region。
- Mixed GC:會回收所有年輕代的 Region 以及部分老年代的 Region,這些老年代的 Region 是根據全局并發標記統計得出的收集收益較高的。
- 回收時機
- Young GC:當年輕代的可用空間不足以分配新對象時觸發,主要與年輕代的內存使用情況相關。
- Mixed GC:通常發生在以下幾種情況:
- 在多次 Young GC 后,老年代的對象逐漸積累,達到一定比例時觸發。
- 當老年代的占用率達到某個閾值,如默認的 45% 時觸發。
- 當應用程序分配內存的速度超過垃圾回收的速度,導致老年代內存壓力增大時,可能會觸發 Mixed GC 來回收部分老年代內存。
- 回收算法
- Young GC:主要使用復制算法,將存活對象從 Eden 區復制到 Survivor 區,或者從一個 Survivor 區復制到另一個 Survivor 區,同時清理不再存活的對象。
- Mixed GC:結合了新生代的復制算法和老年代的標記 - 整理算法。對于年輕代的 Region,仍然采用復制算法;對于選中的老年代 Region,采用標記 - 整理算法,標記存活對象并進行整理,以減少內存碎片。
- 回收目標和效果
- ?Young GC:目標是快速回收年輕代中短生命周期的對象,盡量減少停頓時間,提高垃圾回收的效率。由于年輕代對象的生命周期相對較短,大多數對象在 Young GC 時都會被回收,因此 Young GC 的頻率較高,但每次停頓時間相對較短。
- Mixed GC:在回收年輕代的同時,通過選擇性地回收部分老年代的 Region,進一步提高垃圾回收的整體效率,減少老年代的內存壓力,更好地平衡年輕代和老年代的回收需求,使 G1 能夠更好地適應應用負載特性,優化停頓時間和吞吐量。
- 與并發標記的關系
- Young GC:是觸發全局并發標記的條件之一。在 G1 中,當進行 Young GC 時,會檢查是否需要啟動并發標記過程,如果老年代的占用率等條件滿足,則會啟動并發標記,為后續的 Mixed GC 做準備。
- Mixed GC:依賴于全局并發標記的結果來選擇要回收的老年代 Region。在并發標記階段,G1 會統計各個 Region 的存活對象信息和回收價值等,Mixed GC 根據這些信息來確定哪些老年代 Region 值得回收。