G1(Garbage First)

G1 GC,全称Garbage-First Garbage Collector,通过-XX:+UseG1GC参数来启用,作为体验版随着JDK 6u14版本面世,在JDK 7u4版本发行时被正式推出,相信熟悉JVM的同学们都不会对它感到陌生。在JDK 9中,G1被提议设置为默认垃圾收集器(JEP 248)

G1是一种服务器端的垃圾收集器,应用在多处理器和大容量内存环境中,在实现高吞吐量的同时,尽可能的满足垃圾收集暂停时间的要求。它是专门针对以下应用场景设计的:

  • 像CMS收集器一样,能与应用程序线程并发执行
  • 整理空闲空间更快
  • 需要GC停顿时间更好预测
  • 不希望牺牲大量的吞吐性能
  • 不需要更大的Java Heap

特性

  • 面向服务端应用的垃圾收集器
  • 并行与并发:G1能充分利用多CPU、多核环境使用多个CPU或CPU核心来缩短Stop-The-World停顿时间
  • 分代收集
  • 空间整合:不会产生内存空间碎片,收集后可提供规整的可用内存,整理空闲空间更快
  • 可预测的停顿(它可以有计划的避免在整个JAVA堆中进行全区域的垃圾收集)
  • JAVA堆内存布局与其它收集器存在很大差别,它将整个JAVA堆划分为多个大小相等的独立区域(Region),虽然还保留了新生代和老年代的概念,但新生代和老年代不再是物理隔离,它们都是一部分Region(不需要连续)的集合
  • G1收集器中,虚拟机使用Remembered Set来避免全堆扫描

运作步骤

  • 初始标记:Initial Marking
  • 并发标记:Concurrent Marking
  • 最终标记:Final Marking
  • 筛选回收:Live Data Counting And Evacuation

【参考资料】

【美团--Java Hotspot G1 GC的一些关键技术】-- https://tech.meituan.com/g1.html

results matching ""

    No results matching ""