您的位置:首页 > 其它

垃圾收集器

2018-01-06 20:18 120 查看
参考:《深入理解Java虚拟机》第3章(《网页版图书》)、《Java虚拟机规范(JavaSE7)》

        1、Serial收集器
        2、ParNew收集器
        3、Parallel Scavenge收集器
        4、Serial Old收集器
        5、Parallel Old收集器
        6、CMS收集器
        7、G1收集器

垃圾收集算法是方法论,垃圾收集器是具体实现。


        

1、Serial收集器

Serial  ['sɪərɪəl]  是最基本、发展历史最悠久的收集器。是一个单线程收集器,它工作时,必须暂停其他所有的工作线程(Stop The World)。


HotSpot虚拟机团队一直致力于减少因回收导致的停顿。到1.7它依然是JVM client模式下的收集器。优点是简单高效。用户桌面场景中,分给虚拟机管理的内存一般不大,所以停顿时间一般几十毫秒。

2、ParNew收集器

ParNew   [pɑː]  是Serial的多线程版。


它是许多server模式下首选新生代收集器。其中一个与性能无关的原因是,除了Serial,只有它能配合CMS收集器。

3、Parallel Scavenge收集器

 ['pærəlel]    ['skævɪn(d)ʒ]  新生代、复制算法、多线程的收集器,类似ParNew。其目标是达到一个可控制的吞吐量。牺牲吞吐量和新生代空间就可以缩短GC停顿时间,适合与用户交互频繁的场景。高吞吐量可以高效利用CPU时间,尽快完成运算任务,适合在后台运算的场景。其可根据运行情况,动态调整以提供最合适的停顿时间或者最大吞吐量。参数有:吞吐量参数、开启动态调整参数

4、Serial Old收集器

使用标记-整理算法。主要用在client模式下。在server下,①1.5之前搭配Parallel Scavenge使用;②作为CMS的后备方案。


5、Parallel Old收集器

标记-整理、Parallel Scavenge的老年代版本。



6、CMS收集器

MS:Mark Sweep 标记-清除。目标:获得最短的回收停顿时间。


分为4个步骤:1、初始标记 Stop The World,标记GC Roots能直接关联到的对象,速度很快。2、并发标记 进行GC Roots Tracing。3、重新标记 Stop The World,修正并发标记,时间:初始 < 重新 < 并发4、并发清除 整个回收过程种耗时最长的并发标记和并发清除是与用户线程一起并发执行的。
缺点:1、面向并发设计,对CPU资源敏感2、无法处理浮动垃圾(GC时产生的)3、标记-清除会有空间碎片
CMS失败会触发Full GC;剩余空间大,但是没有足够连续空间,分配大对象失败,也会触发Full GC。

7、G1收集器

将java堆分为多个大小相等的独立区域(Region),不再是物理隔离的,不需要连续的。优先回收价值最大的Region。使用Remembered Set来避免全堆扫描。



特点:1、并行与并发 2、分代收集3、空间整合 标记-整理4、可预测的停顿
步骤:
(1)初始标记 标记GCR能关联到的对象,时间短
(2)并发标记 可达性分析,耗时长
(3)最终标记 修正
(4)筛选标记 一般停顿执行,因为只是回收部分区域
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: