从萌新的角度理解垃圾收集器

从萌新的角度理解内存回收一文,详细的描述了内存回收(又称垃圾收集)涉及的相关方法论。垃圾收集器就是依据内存回收方法论的具体实现。本文简单介绍JVM中主要的垃圾收集器。下面主要看一张图。

垃圾收集器

在上图中,列举了七种不同的垃圾收集器,每个垃圾收集器复杂回收的内存区域不一样,且存在搭配关系。 Serial, ParNew, Parallel Scavenge这三个垃圾收集器负责回收堆区的新生代。CMS, Serial Old,Parallel Old负责回收堆区的老年代。G1垃圾回收器是目前最为先进的垃圾回收器,既能收回新生代又能回收老年代。上述垃圾回收器之间的搭配关系是通过蓝色实线表达,比如新生代若采用Serial,那么老年代只能采用CMS或者Serial Old与之配对。图中红色虚线不代表搭配关系,后文中会详细接收

  • Serial 垃圾回收器
    Serial垃圾收集器,主要有以下几个我们需要知道的内容:
    (1) Serial 采用标记-复制算法进行垃圾回收
    (2) Serial 只有一个线程进行垃圾回收操作,不是多线程
    (3) Serial 在进行垃圾回收时,会暂停其他所有的工作线程,专心进行垃圾回收,这种暂停工作线程的现象,称为stop all word。
    (4) Serail 是最早也是最古老的垃圾回收器,是JVM工作在client模式下新生代默认选择的垃圾回收器。
  • Serial old 垃圾回收器
    从名字可见一般,Serial Old垃圾收集器和Serial垃圾收集器最大的不同之处在于。其采用标记-整理的内存回收方法,而不是标记-复制算法,其也是单线程垃圾回收,垃圾回收时同样需要暂停其他工作线程。
  • ParNew 垃圾回收器
    ParNew是Serial垃圾回收器的多线程版本,其具有多个垃圾回收线程,而不是单线程。其他的比如,收集算法,stop all word,对象分配规则等和Serial垃圾回收器完全一致。
  • Parallel Scavenge
    该垃圾回收器是有多线程的垃圾回收,也是采用标记-复制算法的新生代垃圾回收线程,看上去和ParNew并不太大的区别。但是他们设计追求的目标并不一样,Parallel Scavenge最求最大的吞吐量为目标,即追求CPU运行目标代码的时间竟可能多占CPU总运行时间。其他的垃圾回收器是追求尽可能端的stop all word时间。从这一点看来,面向运算的后台任务,比较适合Paralle Scavenge,面向交互式的任务,追求最短的停顿时间,显然Parallel Scavenge不适合。
  • CMS(Concurrent mark sweep)垃圾回收器
    该款垃圾回收器,是jdk1.5推出的一款具有里程碑意思的垃圾回收器。其面向强交互式应用,具有极短的stop all world 时间,几乎能够保证用户线程和垃圾回收线程同时工作。该垃圾收集器采用标记-清除算法,其整个的回收过程比上述垃圾回收器复杂,其可以分为四个阶段:
    (1)初始标记
    初始标记,主要是比较GCROOT直接关联的对象,这个过程比较快,好时段,需要stop all word,垃圾回收线程和用户线程不能同时工作。
    (2)并发标记
    该过程是GCROOT Tracing 过程,跟踪GCROOT能够引用的所有节点,该过程比较耗时,允许垃圾回收线程和用户线程同时工作
    (3)重新比较
    重新比较过程,是一个标定过程,在并发标记过程中,对用户线程更改的一些引用关系进行重新标记。该过程用时比较短,需要stop all world,不支持垃圾回收线程和用户线程同时工作
    (4)并发清除
    该过程,就是清理标记对象的过程,该过程允许垃圾回收线程和用户线程同时工作,耗时比较长。
    在上述的四个阶段中,耗时标记长的并发标记过程,以及并发清除过程都是允许垃圾回收线程和用户线程同时工作的,因此从总体上来看,CMS的垃圾回收线程允许用户线程和垃圾回收线程同时工作,具有强实时交互能力。
    特别注意: 用户线程和垃圾回收线程同时运行的话,那么在垃圾过程时,标配需要预留一步空间给用户线程支持,不能等到内存空间耗尽时,才进行垃圾回收。在jdk1.6中,设置内存资源使用92%时执行垃圾回收。如若在垃圾回收过程中,预留的内存空间无法满足用户线程的内存需求,则会报出Cocurrent mode failue 失败信息,此时老年代采用 serial old 代替CMS执行垃圾收集,这就是文中首图中红色虚线的意义
  • G1垃圾收集器
    G1收集器是目前为止最为先进的垃圾收集器,其设计目标就是在未来替代CMS垃圾收集器,其也是多线线程垃圾收集,并且追求极短的stop all world时间,同样是分代收集策略,采用标记-整理算法。其最大性能优越之处在于,其拥有可预测停顿能力。其建立了可预测时间停顿模型。其能让使用者指定一具体时间,在这段时间内保证完成垃圾收集动作,具有实时垃圾收集器的特征
    G1垃圾收集器的回收方法这CMS具有很大不同,本文中并无详细讨论G1更具体细节,只粗粒度的介绍下垃圾回收器G1的细分过程,详细请参阅深入理解java虚拟机-JVM高级特性与最佳实践,其细分过程
    (1) 初始标记
    (2) 并发标记
    (3) 最终标记
    (4) 筛选回收
    从上述过程名来看,其细分过程和CMS的细分过程几乎一样,每个过程的逻辑效果也是大致相同,只是采用的具体实现方法不同。初始标记过程和最终标机过程耗时较短,是需要stop all world。并发标机和筛选回收过程耗时较长,不需stop all world。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342