暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

5张图,带你彻底整明白G1垃圾收集器!

IT技术精选文摘 2021-10-29
468

若有收获,请记得分享和转发哦

作为一款高效的垃圾收集器,G1在JDK7中加入JVM,在JDK9中取代CMS成为了默认的垃圾收集器。本文就来详细介绍一下这款主流垃圾收集器,希望能够对你有所帮助。

1 垃圾收集器回顾

1.1 新生代

新生代采用复制算法,主要的垃圾收集器有三个,Serial、Parallel New 和 Parallel Scavenge,特性如下:

  • Serial:单线程收集器,串行方式运行,GC 进行时,其他线程都会停止工作。在单核 CPU 下,收集效率最高。
  • Parallel New:Serial 的多线程版本,新生代默认收集器。在多核 CPU 下,效率更高,可以跟CMS收集器配合使用。
  • Parallel Scavenge:多线程收集器,更加注重吞吐量,适合交互少的任务,不能跟 CMS 配合使用。

1.1 老年代

  • Serial Old:采用标记-整理(压缩)算法,单线程收集。
  • Parallel Old:采用标记-整理(压缩)算法,可以跟 Parallel Scavenge 配合使用
  • CMS:Concurrent Mark Sweep,采用标记-清除算法,收集线程可以跟用户线程一起工作。

CMS缺点:吞吐量低、无法处理浮动垃圾、标记清除算法会产生大量内存碎片、并发模式失败后会切到Serial old。

  • G1:把堆划分成多个大小相等的Region,新生代和老年代不再物理隔离,多核 CPU 和大内存的场景下有很好的性能。新生代使用复制算法,老年代使用标记-压缩(整理)算法。

2 G1介绍

因为采用并发收集,G1的性能开销会更大,这可能会影响吞吐量。

5.4 G1优势

G1在任何的GC期间都可以回收老年代中全空或者占用大空间的内存。这可以避免一些不必要的GC,因为可以非常轻易地释放大量的内存空间。这个功能默认开启,可以采用 -XX:-G1EagerReclaimHumongousObjects 参数关闭。

G1可以选择对整个堆里面的String进行并行去重。这个功能默认关闭,可以使用参数 -XX:+G1EnableStringDeduplication 来开启。


文章转载自IT技术精选文摘,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论