JVM
0

G1垃圾回收器介绍

2024.10.11 | cuithink | 98次围观

  • 初始标记(initial mark,STW):暂停所有的其他线程,并记录下gc roots直接能引用的对象,速度很快

  • 并发标记(Concurrent Marking):同CMS的并发标记

  • 最终标记(Remark,STW):同CMS的重新标记

  • 筛选回收(Cleanup,STW):筛选回收阶段首先对各个Region的回收价值和成本进行排序根据用户所期望的GC停顿

G1 设计指导思想是垃圾优先原则,同时还能照顾到停顿时间和吞吐量。

G1设计的目的是避免完全回收,但是当并发收集不能够足够快的回收内存,就会发生完全回收GC。G1的完整GC当前实现使用单线程的mark-sweep compact算法。

G1的特点:

内存空间的重新定义、更短的停顿时间,要多短有多短、某种程度上去解决空间碎片问题。

Region角色划分:

自由角色FreeTag、新生代分区YoungHeapRegion,细分为eden区和survivor分区、大对象分区HHR,细分为大对象头分区和大对象连续分区、老年代分区OHR、JDK11之后有一类特殊的分区,叫做归档分区,关闭归档分区以及开放归档分区

G1收集器在后台维护了一个优先列表,每次根据允许的收集时间,优先选择回收价值最大的Region(这也就是它的名字Garbage-First的由来),比如一个Region花200ms能回收10M垃圾,另外一个Region花50ms能回收20M垃圾,在回收时间有限情况下,G1当然会优先选择后面这个Region回收。这种使用Region划分内存空间以及有优先级的区域回收方式,保证了G1收集器在有限时间内可以尽可能高的收集效率。

G1 在垃圾清理过程中,是复制对象到空的Region,然后清除Region,直接整理。减少了空间碎片。

G1收集器,禁止调整新生代大小(官网)。


粤ICP备16076548号
发表评论