Java虚拟机--垃圾收集器

CMS垃圾收集器

CMS(Concurrent Mark Sweep)收集器是一种以获取最短回收停顿时间为目标的收集器。非常符合重视响应速度的应用。
CMS收集器基于“标记-清除”算法实现,运作原理相对复杂。整个过程分为四个步骤:

  1. 初始标记(CMS initial mark)
  2. 并发标记(CMS concurrent mark)
  3. 重新标记(CMS remark)
  4. 并发清除(CMS concurrent sweep)

其中初始标记和重新标记仍然要Stop the world。

  1. 初始标记仅仅标记一下GC Roots能直接关联到的对象
  2. 并发标记是进行GC Roots进行tracing的过程,进行可达性分析,找出所有活的对象
  3. 重新标记是为了修正并发标记期间因为用户程序继续运行而导致标记产生变动的那一部分对象的标记记录。停顿时间比初始标记稍长,但是远比并发标记短
  4. 并发清除执行标记清除算法的清除步骤

因为整个过程中耗时最长的并发标记与并发清除过程收集器线程都与用户线程并发工作。所以在总体上来说,CMS的内存回收过程是与用户线程并发执行的。

但是CMS主要有三个缺点

  1. CMS收集器对CPU资源非常的敏感。
  2. CMS无法处理浮动垃圾,即在重新标记之后,并发清理之前可能产生的新的垃圾,这些垃圾只能等到下一次GC的时候才能清除。
  3. CMS基于标记清除算法,算法会导致在垃圾收集结束会有大量的碎片生成。

G1垃圾收集器

G1收集器是一款面向服务端应用的收集器,与其他的收集器相比G1收集器有以下的特点:

  1. 并行与并发
  2. 分代收集:G1之前的收集器都是在整个新生代或者整个老生代上进行垃圾收集,使用G1收集器时,Java堆的内存布局也有所很大差别。它将Java堆分为若干个大小相等的区域(region),虽然还保留着新生代与老生代的概念,但他们不再物理隔离,都是一部分region的集合。
  3. 空间整合:对比CMS的标记清除法产生大量的碎片,整体来看G1收集器使用标记-整理算法实现。从局部(两个Region之间)来看是基于复制算法实现的。有利于程序长时间进行。
  4. 可预测的停顿:降低停顿时间是CMS收集器与G1收集器的共同关注点。但是G1除了追求低停顿,还建立了可预测的时间停顿模型。能让使用者指明在一个时间长度为M毫秒的时间段内,消耗在GC上的时间不超过N毫秒

G1可以有计划的避免在java堆中进行全区域的内存收集,G1跟踪各个region里面的垃圾堆积的大小(可能的回收空间大小与消耗的时间),在后台维护一个优先列表,每次根据允许的收集时间,优先回收最大的Region(Garbage-First)。这种region的划分与优先级的区域回收方式,可以让G1在有限的时间内获得尽可能高的回收效率。
主要步骤:

  1. 初始标记
  2. 并发标记
  3. 最终标记
  4. 筛选回收

Serial收集器

se·ri·al /ˈsirēəl/
进行垃圾收集时,必须暂停所有的其他工作线程,直到它收集结束
采用标记整理算法,新生代收集器

ParNew收集器

Serial的多线程版本,使用多条线程进行垃圾回收
唯一可以配合CMS收集器的新生代收集器,采用复制算法

Parallel Scavenge 收集器

Scavenge /ˈskavənj/ 清除
使用复制算法的多线程新生代收集器,目标是达到一个可控的吞吐量

Serial Old

老年代的Serial

Parallel Old

老年代的Parallel Scavenge

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值