码迷,mamicode.com
首页 > 其他好文 > 详细

垃圾收集器二

时间:2017-10-28 11:18:23      阅读:93      评论:0      收藏:0      [点我收藏+]

标签:阶段   并发   碎片化   有一个   分割   一起   top   mod   failure   

CMS

 1.CMS垃圾收集器是以取得最短的垃圾收集停顿时间为目标的收集器,尤其适合需要快速响应的互联网网站或者B/S架构的服务端。

 2.并发的垃圾收集器,使用标记清除算法

 3.运行较为复杂,过程分为4个步骤:初生标记,并发标记,重新标记,并发清除,在初始标记和重新标记的时候依然会有GC停顿,但是时间比并发标记会短很多,而并发标记和并发清除可以和用户程序一起运行

 4.对CPU资源非常敏感,并发阶段不会暂停用户线程,但是会占用一部分线程导致应用程序变慢,总的吞吐量降低

 5.无法收集浮动垃圾,可能导致“ConCurrent Model Failure”进而引发Full GC。浮动垃圾是指GC并发的时候,用户程序依然运行,因此产生的垃圾,而这部分垃圾是标记过后产生的,垃圾收集器就不会收集这部分垃圾

 垃圾收集阶段用户程序还要运行所以需要预留部分内存供用户线程运行。如果预留内存不能满足应用需求,就会引发“ConCurrent Model Failure”,此时会启动Serial Old收集垃圾导致长时间的GC停顿。使用-XX:CMSInitialtingOccupancyFraction设置预留空间大小

 6.由于使用的是标记-清理算法必然导致内存碎片化

G1

 1.并发并行,利用多CPU缩短stop-the-world停顿时间,部分其他收集器需要停止java线程执行GC动作,G1可以通过并发继续执行java程序

 2.分代收集,G1不需要其他垃圾收集器配合就能管理整个GC堆,而是采用不同方式管理新生对象,已经存活一段时间的对象和老年对象

 3.空间整合,从整体上看采用标记-整理算法,局部使用复制算法

 4.可预测停顿,能让使用者明确在一个长度为M毫秒的时间片段内,消耗在垃圾收集停顿的时间小于N

 5.G1不在区分新生代和老年代,而是将内存划分为大小相同的独立区域,但是保留新生代和老年代的概念,不在是物理上分割,而是一部分独立区域的集合。

 6.通过在后台维护一个表,每次根据运行收集的时间,优先回收最大的区域,保证高效

 7.当一个对象被另一个独立区域引用,为了避免全堆扫描每个区域都会有一个remembered Set 去维护这样的一个关系

 8.G1收集器的步骤:初始标记,并发标记,最终标记,筛选回收

 

垃圾收集器二

标签:阶段   并发   碎片化   有一个   分割   一起   top   mod   failure   

原文地址:http://www.cnblogs.com/derleser/p/7735523.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!