GC算法
标记-清除复制标记-整理分代收集
(资料图片)
一些收集器
1. Serial
* 单线程收集器
2. ParNew
Serial的多线程版
3. Parallel Scavenge
* 关注吞吐率
4. CMS收集器
* stop the world 时间最短
5. G1收集器
使用G1: -XX:+UseG1GC -Xmx32g -XX:MaxGCPauseMillis=200, 设置最大间隔时间G1将新生代、老年代的物理空间划分取消了将堆划分为若干区,某个区可能是Eden,可能是Survivor,也可能是Old增加了一个类型:Humongous,保存巨型对象永久代改为元空间(metaSpace)两种GC模式:Young GC和Mixed GC Young GC:对Eden区进行GC,部分数据直接晋升到Old区,部分移到Survivor区。 RSet概念(没看懂),大体是一个指针,标记哪些被引用Card Table(没看懂),大体是减少赋值器的扫描处理开销。1.根扫描 2. 更新RS 3. 处理RS 4. 对象拷贝 5. 处理引用队列MixedGC 正常的YoungGC + 回收部分老年代分区步骤:1. 全局并发标记 2. 拷贝存活对象全局并发标记:1. 初始标记 2. 跟区域扫描 3. 并发标记 4. 最终标记 5. 清除垃圾调优 XX:MaxGCPauseMillisXX:G1HeapRegionSizeXX:ParallelGCThreadsXX:ConcGCThreadsXX:InitiatingHeapOccupancyPercent 退化为Full GC 并发模式失败晋升失败或者疏散失败巨型对象分配失败使用Serial模式,进行Full GC
参考链接
Java GC讲解 深入理解 Java G1 垃圾收集器