本文共 975 字,大约阅读时间需要 3 分钟。
G1收集器是在JDK1.7开始可以设置使用,在JDK1.9时设置为默认垃圾收集器。G1收集器和其他收集器相比有以下特点
G1提供了三种模式的垃圾回收
1、Minor GC 2、Mixed GC 3、Full GC
在G1当中把堆内存分成了一个个Region,新生代,老年代不再是物理上面的分割,而是逻辑上的分割
Minor GC
当eden区满的时候,会触发一次Minor GC,这种触发机制和之前的其他垃圾收集器差不多,都是将Eden区和其中一个Survivor区的存活对象拷贝到另外一个Survivor区或者晋升到Old 区域,然后清空Eden区和Survivor区。
Mixed GC
当越来越多的年轻代中的对象晋升到老年代,会触发一次混合的垃圾收集器。也就是除了回收老年代,也会回收年轻代。这里是一部分老年代,可以选择哪些老年代的对象需要收集。
Full GC
如果对象内存分配的过快,mixed gc来不及回收,老年代被填满,就会触发Full GC.G1的Full GC就是Serial Old gc, 会暂停工作线程。
G1收集器的大概的工作过程
1、初始标记,整个过程STW,标记了从GC Roots 的可达对象
2、并发标记 ,真个过程用户线程的垃圾回收线程共同执行,标记出GC Roots可达对象的关联对象,收集整个Region的存活对象。
3、最终标记,整个过程STW,标记出并发标记遗漏的,以及引用关系发生变化的存活对象。
4、筛选回收,垃圾清理过程,如果整个Region没有存活对象,将Region加入到存活列表当中。