G1收集器

有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步,认准https://blog.zysicyj.top

全网最细面试题手册,支持艾宾浩斯记忆法。这是一份最全面、最详细、最高质量的 java面试题,不建议你死记硬背,只要每天复习一遍,有个大概印象就行了。 https://store.amazingmemo.com/chapterDetail/1685324709017001`

G1垃圾收集器

G1垃圾收集器(Garbage-First Collector)是Java虚拟机(JVM)中的一种高级垃圾收集器,旨在以高概率满足垃圾收集(GC)暂停时间目标,同时还能保持良好的吞吐量。G1收集器是在JDK 7中引入的,并在后续版本中得到了改进和优化。

G1收集器的特点

  • 并发和并行处理:G1能够利用多核处理器的优势,同时执行垃圾收集的多个阶段。

  • 分代收集:虽然G1是一个整体收集器,但它依然遵循分代垃圾收集的概念,区分年轻代和老年代。

  • 区域化堆结构:G1将堆内存划分为多个大小相等的独立区域(Region),这些区域可以是Eden区、Survivor区或Old区。

  • 可预测的停顿时间模型:G1收集器的目标是允许用户指定期望的停顿时间,并尽可能地在这个时间范围内完成垃圾收集。

G1收集器的工作过程

G1收集器的工作过程可以分为以下几个阶段:

1. 初始标记(Initial Marking)

  • 这个阶段标记了从GC根直接可达的对象。

  • 它是在一个STW(Stop-The-World)暂停中完成的,但通常很快。

2. 并发标记(Concurrent Marking)

  • 在这个阶段,G1收集器遍历堆中的对象图,标记所有可达的对象。

  • 这个过程是并发执行的,不需要停止应用线程。

3. 最终标记(Final Marking)

  • 这个阶段处理在并发标记阶段遗留下来的一些小任务,并处理SATB(Snapshot-At-The-Beginning)队列中的引用。

  • 这个阶段可能会有一个短暂的STW暂停。

4. 筛选回收(Evacuation)

  • 在这个阶段,G1收集器将选定的区域中的存活对象复制到空闲区域,同时回收这些区域中的空间。

  • 这个阶段是在STW暂停中完成的,并且是G1收集器中最长的暂停之一。

G1收集器的优势

  • 可控的停顿时间:G1收集器允许用户指定期望的GC停顿时间,使得系统更加可预测。

  • 高效的内存回收:通过并发和并行技术,G1能够在维持吞吐量的同时,有效地回收内存。

  • 适合大堆内存:G1收集器特别适合大堆内存的应用,因为它可以更好地管理堆空间并减少碎片。

G1收集器的使用

要启用G1收集器,可以在启动Java应用时添加以下JVM参数:

-XX:+UseG1GC

此外,还可以通过以下参数来调整G1的行为:

  • -XX:MaxGCPauseMillis:设置期望的最大GC停顿时间。

  • -XX:GCPauseIntervalMillis:设置期望的停顿间隔时间。

  • -XX:InitiatingHeapOccupancyPercent:设置触发并发GC周期的Java堆占用率阈值。

总结

G1垃圾收集器是一个为大型应用和多核处理器设计的收集器,它通过划分区域和并发处理来优化停顿时间和吞吐量。随着Java应用对性能要求的不断提高,G1收集器成为了许多高性能应用的首选垃圾收集器。

最后更新于