您的位置:首页 > 其它

几种常见GC方式对比

2017-08-01 17:54 281 查看

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:MaxGCPauseMillis

XX:G1HeapRegionSize

XX:ParallelGCThreads

XX:ConcGCThreads

XX:InitiatingHeapOccupancyPercent

退化为Full GC

并发模式失败

晋升失败或者疏散失败

巨型对象分配失败

使用Serial模式,进行Full GC

参考链接

Java GC讲解

深入理解 Java G1 垃圾收集器
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: