JVM篇:CMS与G1区别&适用场景
关于JMV垃圾收集器,面试常问CMS与G1的区别问题,总是记不住。为了方便记录,整理成如下表格,从不同维度对比CMS和G1两个收集器。
区别 | CMS | G1 |
回收对象 | 回收老年代 需要配合新生代收集器一起使用 | 老年代和新生代 |
STW时间 | 以最小停顿时间为目标 | 可预计的垃圾回收停顿时间 |
回收算法 | 标记清除 | 标记整理 |
垃圾碎片 | 产生内存碎片 | 没有内存碎片 |
垃圾回收过程 |
|
|
浮动垃圾 | 会产生浮动垃圾(第四阶段产生) | 没有浮动垃圾(第四阶段,用户线程卡停) |
浮动垃圾产生原因 | 第四阶段并发清楚,GC线程和用户线程同时运行,用户线程会产生浮动垃圾 | |
浮动垃圾导致结果 | 浮动垃圾导致内存不足时候,出现“Concurrent Mode Failure”,出现此错误时就会切换到SerialOld收集模式 | |
大对象处理 | 直接进入老年代 | 如果大于一个region的50%,会横跨多个region进行存放 |
优点 |
|
|
缺点 |
| |
使用场景 |
|
|
参考资料