[英]G1: What are the differences between mixed gc and full gc?
對於垃圾第一收集器, 年輕的gc意味着僅在年輕一代中執行gc並且混合gc將清潔年輕一代和老一代。
什么是完整的gc ? 為什么它比混合gc持續更長時間?
我做了一些搜索,但我找不到任何解釋完整gc的帖子。
來自Oracle G1 GC博客和technetwork文章
年輕的GC:
Young GC的收集集僅包括年輕/幸存者區域。
混合GC:
混合GC的集合包括年輕/幸存者區域,但也包括舊區域。
令人敬畏的物品和豐富的分配
對於G1 GC ,任何超過區域大小一半的對象都被視為“ Humongous對象 ”。 這樣的對象直接在老一代中分配到“ Humongous region s”中。 這些地區是一個連續的地區。
在完全垃圾收集循環期間,在清理階段期間,在標記循環結束時釋放死Humongous對象 。
為了減少復制開銷,Humongous對象不包括在任何疏散暫停中。 完整的垃圾收集循環將Humongous對象壓縮到位。
通常一個完整的GC清理整個堆 - 年輕和終身空間(舊的)
另外,無論GC類型如何,您都必須擔心“應用程序線程停止”的時間:Young GC或Full GC等。
g1將堆分成區域,其中年輕一代和老一代各自由幾個區域組成。 一個年輕的GC會收集一些地區(並非所有地區),然而,所有地區都分配給年輕一代。 混合GC收集一些區域(不是全部),一些屬於年輕一代,至少一個屬於老一代。 完整的GC收集所有地區,因此,年輕和老一代。
在正常情況下,G1應僅運行年輕和混合收集以滿足其暫停時間目標。
完整的GC是一種后備機制,很可能違反這些目標。 當混合GC無法跟上分配,無法滿足大量分配或使用System.gc()
和其他一些條件請求GC時,就會發生這種情況。
使用-XX:+PrintGCDetails
日志記錄應包含完整集合的原因。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.