垃圾回收器JVM

提前声明图像从别的博客复制过来的还有的是从别的课程粘贴过来的

Serial
        最基础的收集器,使用复制算法、单线程工作,只用一个处理器或一条线程完成
垃圾收集,进行垃圾收集时必须暂停其他所有工作线程。
        Serial 是虚拟机在客户端模式的默认新生代收集器,简单高效,对于内存受限的
环境它是所有收集器中额外内存消耗最小的, 对于处理器核心较少的环境, Serial
由于没有线程交互开销,可获得最高的单线程收集效率。

 ParNew
        Serial 的多线程版本,除了使用多线程进行垃圾收集外其余行为完全一致。
ParNew 是虚拟机在服务端模式的默认新生代收集器,一个重要原因是除了
        Serial 外只有它能与 CMS 配合。自从 JDK 9 开始,ParNew 加 CMS 不再是官
方推荐的解决方案,官方希望它被 G1 取代。

 Parallel Scavenge
        新生代收集器,基于复制算法,是可并行的多线程收集器,与 ParNew 类似。
特点是它的关注点与其他收集器不同,Parallel Scavenge 的目标是达到一个可控
制的吞吐量, 吞吐量就是处理器用于运行用户代码的时间与处理器消耗总时间的
比值。

 Serial Old
        Serial 的老年代版本,单线程工作,使用标记-整理算法。
        Serial Old 是虚拟机在客户端模式的默认老年代收集器, 用于服务端有两种用途:
① JDK5 及之前与 Parallel Scavenge 搭配。② 作为 CMS 失败预案。

Parellel Old
Parallel Scavenge 的老年代版本,支持多线程,基于标记-整理算法。JDK6 提供,
注重吞吐量可考虑 Parallel Scavenge 加 Parallel Old。


CMS
以获取最短回收停顿时间为目标,基于标记-清除算法,过程相对复杂,分为四
个步骤:初始标记、并发标记、重新标记、并发清除。
初始标记和重新标记需要 STW(Stop The World,系统停顿),初始标记仅是标
记 GC Roots 能直接关联的对象,速度很快。并发标记从 GC Roots 的直接关联
对象开始遍历整个对象图,耗时较长但不需要停顿用户线程。重新标记则是为了
修正并发标记期间因用户程序运作而导致标记产生变动的那部分记录。 并发清除
清理标记阶段判断的已死亡对象,不需要移动存活对象,该阶段也可与用户线程
并发。
缺点:① 对处理器资源敏感,并发阶段虽然不会导致用户线程暂停,但会降低
吞吐量。② 无法处理浮动垃圾,有可能出现并发失败而导致 Full GC。③ 基于
标记-清除算法,产生空间碎片。 

 

 G1
        开创了收集器面向局部收集的设计思路和基于 Region 的内存布局,主要面向服
务端,最初设计目标是替换 CMS。
        G1 之前的收集器,垃圾收集目标要么是整个新生代,要么是整个老年代或整个
堆。而 G1 可面向堆任何部分来组成回收集进行回收,衡量标准不再是分代,
而是哪块内存中存放的垃圾数量最多,回收受益最大。
跟踪各 Region 里垃圾的价值,价值即回收所获空间大小以及回收所需时间的经
验值, 在后台维护一个优先级列表,每次根据用户设定允许的收集停顿时间优先
处理回收价值最大的 Region。这种方式保证了 G1 在有限时间内获取尽可能高
的收集效率。
G1 运作过程:
        初始标记:标记 GC Roots 能直接关联到的对象,让下一阶段用户线程并发运行时
能正确地在可用 Region 中分配新对象。需要 STW 但耗时很短,在 Minor GC 时同
步完成。  
        并发标记:从 GC Roots 开始对堆中对象进行可达性分析,递归扫描整个堆的对象
图。耗时长但可与用户线程并发,扫描完成后要重新处理 SATB 记录的在并发时有
变动的对象。  
        最终标记: 对用户线程做短暂暂停, 处理并发阶段结束后仍遗留下来的少量 SATB 记
录。  
         筛选回收:对各 Region 的回收价值排序,根据用户期望停顿时间制定回收计划。
必须暂停用户线程,由多条收集线程并行完成。  
        可由用户指定期望停顿时间是 G1 的一个强大功能,但该值不能设得太低,一
般设置为 100~300 ms。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值