G1网络器在背景维护了一个优先列表,每次根据答应的网络时间,优先选择回收代价最大的Region(这也就是它的名字Garbage-First的由来)。这种使用Region分别内存空间以及有优先级的区域回收方式,保证了G1网络器在有限时间内可以尽大概高的网络效率(把内存化整为零)。
从JDK9开始,G1垃圾网络器成为了默认的垃圾网络器。
Young Collection(年轻代垃圾回收)
初始时,全部区域都处于空闲状态
创建了一些对象,挑出一些空闲区域作为伊甸园区存储这些对象
当伊甸园需要垃圾回收时,挑出一个空闲区域作为幸存区,用复制算法复制存活对象,需要停息用户线程
随着时间流逝,伊甸园的内存又有不足
将伊甸园以及之前幸存区中的存活对象,采用复制算法,复制到新的幸存区,此中较老对象晋升至老年代
Young Collection + Concurrent Mark (年轻代垃圾回收+并发标志)
当老年代占用内存超过阈值(默认是45%)后,触发并发标志,这时无需停息用户线程
并发标志之后,会有重新标志阶段办理漏标题目,此时需要停息用户线程。
这些都完成后就知道了老年代有哪些存活对象,随后进入混合网络阶段。此时不会对全部老年代区域进行回收,而是根据停息时间目标优先回收代价高(存活对象少)的区域(这也是 Gabage First 名称的由来)。