美文网首页
JVM GC 原理 5:详解 G1 垃圾回收器

JVM GC 原理 5:详解 G1 垃圾回收器

作者: cbhe | 来源:发表于2022-07-20 17:00 被阅读0次

    基本原理

    G1 垃圾回收器是从 CMS回收器是基于分代理论和分块理论的基础上发展而来的。

    • 分代:根据 java 对象的存活规律,氛围新生代和老年代,新生代采用复制算法,老年代使用标记-压缩算法或者标记-清除算法
    • 分区:将jvm 堆分为多个大小固定的区域,这样可以提升垃圾回收时候的并行数。

    垃圾回收模式

    G1 垃圾回收模式有两种:youngGC 和 mixedGC

    • young GC:只回收新生代,采用复制算法
    • mixed GC:回收新生代和一部分老年代

    特点

    1. 可控的垃圾回收时间

    G1 垃圾回收器,由于将堆空间分成了大小固定的块,且支持只回收某几个块而不是全部块,所以可以通过确定回收的块数来满足垃圾回收的指定时间要求,这是其他垃圾回收算法都无法做到的。而且,垃圾最多的块会被优先回收,极大提升了垃圾回收效率,这也是它叫做 G1(garbage first)的原因。

    2. 提升了新生代的垃圾回收速度

    之前的垃圾回收器,对于新生代一般都是采用复制算法,G1 对于新生代也是采用复制算法,不过由于 G1 的堆内存被分成了大小固定的块,因此对新生代进行垃圾回收时,不仅可以想其他垃圾回收器一样可以并发标记垃圾,还能并发移动存活对象到新的块中,其他垃圾回收算法由于 S 区(survivors 区)是连续的内存,因此即便可以做到并发标记也无法做到并发移动。

    适合的场景

    G1 适合多核大内存的场景,而且是对可用性要求较高的场景。

    调优思路

    • 如果应用程序对相应时间要求较高,可以调小 GC 最大停顿时间。但如果大对象较多,则该调优思路就会失效,因为分块大小不能太小,但每次垃圾回收至少都得回收一个以上的块,如果回收一个块的时间都会大于用户设置的最小停顿时间,则最小停顿时间无法被保证。
    • 对于大对象较多的批处理场景,可以同时调大分块大小和停顿时间。

    面试思路

    相关文章

      网友评论

          本文标题:JVM GC 原理 5:详解 G1 垃圾回收器

          本文链接:https://www.haomeiwen.com/subject/bsrsirtx.html