JVM垃圾收集器

前面既然说了JVM的集中垃圾回收集器的算法,那么现在可以来看一下垃圾收集器了。如果说垃圾收集器算法是方法论,那么

垃圾收集器就是内存回收的具体实现。

这里主要讨论的是jdk1.7以后的HotSpot虚拟机,采用G1收集器。

 上图展示了7个不同分代收集器,如果两个收集器间存在连线,就说明他们之间可以搭配使用。虚拟机所在的区域,则表示它们属于新生代收集器还是老年代收集器。 接下来逐一介绍这个7个垃圾收集器

Serial

是最基本,历史最悠久的收集器,是一个单线程的收集器当它进行垃圾回收时,所以其他的线程都必须暂停,直到它收集结束。

优点:简单而高效

ParNew

其实就是Serial多线程的版本,除了可以使用多个线程以外,其余和Serial用法完全一样。

Parallel Scavenge

是一个新生代收集器,也是使用复制算法的收集器,又是并行的多线程收集器。可以达到一个可控的吞吐量,高效率的利用cpu时间,尽快完成运算任务。

Serial Old

老年代版本的收集器,也是一个单线程的收集器是使用标记-整理算法实现的。

Parallel Old

老年代版本收集器,使用多线程标记-整理算法,是一个多线程的收集器

CMS

一种以获取最短回收停顿时间为目标的收集器,CMS基于标记-清除算法实现的。

包含

 初始化标记

并发标记

重新标记

并发清除

优点:并发收集、低停顿。

缺点:对CPU资源敏感,在并发过程中占用CPU资源,导致程序变慢,吞吐量降低

           无法处理浮动垃圾。由于并发清理的用户还在产生新垃圾 ,这部分垃圾出现在标记之后,所以这次清理无法清理,必须等到下一次GC清理

           基于标记-清除的算法实现的,所以在清除垃圾之后会有大量的空间碎片。

G1收集器

 是一款面向服务端应用的垃圾收集器,具备一下特点

 并行和并发 :G1能充分利用多CPU,多核环境的硬件优势,使用多个CPU来缩短停顿的时间,部分收集器原本需要停顿java线程去执行GC动作,G1收集器通过并发的方式让java程序继续执行

分代收集:与其他收集器一样,分代的概念在G1中保留。

空间整合:G1从整体看是基于标记-清理 ,从局部看是基于复制算法实现的。G1运行期间不会产生空间碎片。

可预测的停顿:这是G1对于CMS的一大优势,G1除了追求低停顿以外,还能建立停顿时间模型,能让在指定长度的M毫秒时间段内,消耗垃圾收集器 上的时间不得超过N毫秒。

G1之所以能建立停顿时间模型,是因为它可以有计划的避免整个Java堆中进行全区域的垃圾收集。

G1收集器大致分为一下几步

初始化标记

并发标记

最终标记

筛选回收

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值