JVM 垃圾收集算法与垃圾收集器
2020-12-25 17:19:08 0 举报
JVM 垃圾收集算法与垃圾收集器
作者其他创作
大纲/内容
用户线程4
CPU2
用户线程2
老年代采用标记-整理算法暂停所有的用户线程
用户线程3
CPU0
Safepoint
G1
G1收集器
Serial
用户线程1
CPU3
并发标记
Parallel Scavenge
Serial Old GC线程
筛选回收
初始标记
ParNew
算法名称
过程
优点
缺点
标记-清除(Mark-Sweep)
1、标记需清理的内存;2、清理已标记的内存
实现简单
产生空间碎片
复制(Copying)
1、内存二等分;2、复制存活对象到另一半的内存;3、清理原有内存所有对象
无空间碎片
空间利用率低(50%)
标记-整理(Mark-Compact)
1、标记需清理的内存;2、将存活对象向一端移动;3、清理边界以外的所有对象
无空间碎片,空间利用率高
只标记GC Root,停顿时间极短
Serial GC线程
重新标记
新生代采用复制算法暂停所有的用户线程
ZGC
CPU1
CMS收集器
CMS
Old区
Paralled Old GC线程1
Young区
Parallel Scavenge/Parallel Old收集器
Paralled Old GC线程2
ParNew收集器
垃圾收集器
优点
缺点
实现算法
收集范围
应用
简单高效
单线程,STW
复制算法
新生代
Client模式下的默认新生代收集器
Serial Old
标记-整理算法
老年代
Client模式下的默认老年代收集器,作为CMS收集器的后备预案,在并发收集发生并发失败时使用
并行收集,在多核CPU下,效率比Serial高
STW,单核CPU下比Serial效率低
运行在Server模式下的虚拟机中首选的新生代收集器,默认收集线程数与CPU数量相同
并行收集,吞吐量
Server模式下的默认新生代收集器,更关注吞吐量,适合后台运算而不需要太多交互的场景
Parallel Old
STW,单核CPU下比Serial Old效率低
更关注吞吐量
并发收集,与用户线程并行,低停顿
空间碎片,并发期间会降低吞吐量,还会并发失败
标记-清除算法
更关注停顿时间,适合重视服务响应速度的场景
并发收集,与用户线程并行,可控延迟
标记-整理算法、复制算法
整个堆
面向Server端,可控延迟下追求最大吞吐量
老年代采用标记-清除算法,暂停所有的用户线程
最终标记
并发清理
ParNew GC线程3
ParNew GC线程1
Parallel Scavenge GC线程1
ParNew GC线程2
Parallel Scavenge GC线程3
Parallel Scavenge GC线程2
Paralled Old GC线程3
Serial/Serial Old收集器
0 条评论
下一页