9. G1垃圾回收器
-
特点:
- 适合多CPU,大内存环境,能尽量缩短STW;
- 整体上标记-整理算法,局部复制算法,无内存碎片
- 把内存划分为独立的子区域,每个区域保留新生代和老年代的区别,但不要求内存连续,每个区域可随着G1运行改变自己的角色,垃圾回收时避免了全内存扫描;
-
原理:
G1收集器将堆分割成多个子区域(默认2014个分区),每个区域大小为2的整数次幂(-XX:G1HeapRegionSize=n,1MB~32MB),只有逻辑上的分代概念,物理上不再隔离(每个分区都可能随G1的运行在不同代之间切换)。
Eden区耗尽时触发垃圾回收,暂停所有进程,并形成连续内存块;
- Eden区数据移动到Survivor区,若Survivor区空间不够,则Eden区数据全部晋升Old区;
- Survivor区数据移动到新的Survivor区,部分数据晋升Old区;
- 最后Eden区收集完,GC结束
-
优点(与CMS相比)
-
并发回收,整体上采用标记整理算法,局部采用复制算法。避免了全内存扫描,只需按照区域扫描;
-
可以控制停顿时间,每次根据允许停顿的时间去收集垃圾最多的区域。
-
-
开启参数: XX: +UseG1GC