JVM——这七种垃圾回收器你知道吗?

垃圾回收器

在这里插入图片描述

评价垃圾回收器好坏的标准:
1.回收的空间效率.扫-遍地,能扫出多少垃圾.
2.回收的速度.扫- -遍地要花多长时间.
3.垃圾回收和应用线程之间能否并发执行.扫地的时候会不会影响到别人干活. (STW)
4.垃圾回收器是否是多线程的.
5.回收的时间是否是可预测的.承诺10分钟之内一定把地扫完.即使扫的不算非常干净,但是也最大程度上的把一些重要的垃圾清理掉了
垃圾回收器里面都是要做两件事:标记(可达性分析)+回收(标记清除、标记复制、标记整理)

Serial收集器

.给新生代使用,串行回收.
复制算法单线程进行标记+回收
在这里插入图片描述

ParNew收集器

(新生代收集器,多线程进行GC)
在这里插入图片描述

Parallel Scavenge收集器

(新生代收集器,并行GC)
在这里插入图片描述

Serial Old收集器

(老年代收集器,串行GC)
相当于Serial收集器的老年代版本.基本特点差不多,也是单线程的方式进行标记回收的.
在这里插入图片描述

Parallel Old收集器

(老年代收集器,并行GC)
在这里插入图片描述

CMS老年代收集器

并行GC,采用的是多线程标记-清除
特点,尽可能缩短STW时间.

在这里插入图片描述

G1回收器

比较新的回收器,Java11 开始才默认使用的回收器.是以上7种中最优秀的回收器.
在这里插入图片描述
针对新生代的region同样是使用复制算法进行回收.
在这里插入图片描述

针对老年代的回收,类似于CMS,但是有一定的差别.
a)初始标记和CMS类似,只去找GCRoot直接关联的对象.时间比较短,会涉及STW
b)并发标记(Concurrent Mark),和应用线程并发执行,进行可达性分析,遍历所有的对象. (不涉及STW)
和CMS不一样的是, 如果发现某个老年代region中已经没存活对象了,就直接回收掉.不去等最后一个环节回收了.
c)最终标记.为了修正b)产生的误差. SATB(snapshot- at- the- beqining)
d)筛选回收
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/char_m/article/details/107750778