导航
- 一. G1垃圾收集算法详解
- 1. 大对象Humongous说明
- 2. G1收集器执行一次GC运行的过程步骤
- 3. G1垃圾收集分类
- 4. G1垃圾收集器参数设置
- 5. G1垃圾收集器的优化建议
- 6. 适合使用G1垃圾收集器的场景?
- 二. ZGC垃圾收集器详解
- 1. NUMA与UMA
- 2. 颜色指针
- 3. ZGC的运作过程
- 4. ZGC垃圾收集器存在的问题及解决方案
- 5. ZGC的触发机制(4种)
- ★ 6. 如何选择垃圾收集器?
- 三. 安全点与安全区域详解
- 1. 安全点
- 2. 安全区域
一. G1垃圾收集算法详解
G1
(Garbage-First)是一款面向服务器
的垃圾收集器,主要针对配备多颗处理器及大容量内存的机器,以极高概率满足GC停顿时间要求的同时,还具备高吞吐量性能特征。
- 使用G1,JVM堆中不存在物理划分的年轻代,S0,S1区和老年代区,但是保存了年轻代和老年代的概念,并且引用了`大对象区域Humongous
- G1将JVM堆内存分成大小相等的
独立区域(Region),
JVM最多可以有2048
个Region - 一个Region的大小等于堆大小除以2048,假如堆内存是4096M,那么一个Region的大小就是2M,也可以使用参数“-XX:G1HeapRegionSize”手动指定Region大小,但是建议使用默认大小
- 默认
年轻代
占堆内存的大小是5%
,如果堆大小为4096M,那么年轻代占200M的内存大小,对应大概100个Region大小,可以通过“-XX:G1NewSizePercent”设置新生代的初始占比,在系统运行中,JVM会不断的给年轻代增加更多的Region,但是上限是不能超过堆大小的60%,可以通过 “-XX:G1MaxNewSizePercent”调整。 年轻代
中的Eden和Survivor对应的region也跟之前一样,默认8:1:1,假设年轻代现在有1000个Region,Eden区对应800个,S0对应100个,S1对应100个。- 一个Region可能之前是年轻代,如果Region进行了垃圾回收,之后可能又会变成老年代,也就是说Region的区域功能可能会动态变化。