G1垃圾收集分类
  Olt1rl96HKat 2023年11月02日 94 0

G1的垃圾分为YoungGC、Mixed GC和Full GC。

Young GC

G1与之前垃圾收集器的Young GC有所不同,并不是当新生代的Eden区放满了就进行垃圾回收,G1会计算当前Eden区回收大概需要多久的时间,如果回收时间远小于参数-XX:MaxGCPauseMills设定的值,那么G1就会增加年轻代的Region(可以从老年代或Humougous区划分Region给新生代),继续给新对象存放;直到下一次Eden区放满,G1计算回收时间接近参数-XX:MaxGCPauseMills设定的值,那么就会触发Young GC。

Mixed GC

如果老年代的堆空间内存占比达到了参数-XX:InitiatingHeapOccupancyPercent设定的值就会触发Mixed GC,回收所有的新生代和部分老年代(根据用户设置的GC停顿时间来确定老年代垃圾收集的先后顺序)以及Humogous区。正常情况下G1的垃圾收集是先做Mixed GC,主要使用复制算法,需要把各个Region中存活的对象复制到另一个空闲的Region,如果在复制过程中发现没有足够的空Region放复制的对象,那么就会触发一次Full GC。

Full GC

停止系统程序,然后采用单线程进行标记、清理和压缩整理,好空闲出来一批Region来供下一次Mixed GC使用,这个过程是非常耗时的。

G1收集器的Region内存回收时,会涉及到大量跨区引用的对象,解决方式也是通过记忆集(卡表)。每个Region都要维护一个其他Region对自己内部对象的引用。CMS中只有新生代和老年代,即使出现了跨代引用,也很好解决。

但G1是把堆分成了多个Region,Region中对象的可能被多个Region引用,所以G1的卡表实现要比CMS复杂很多。



【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

Olt1rl96HKat
作者其他文章 更多

2023-12-22

2023-12-22

2023-12-15

2023-12-15

2023-12-15

2023-12-15

2023-12-15