常见虚拟机垃圾收集器总结

HotSpot jvm收集器


上面有7中垃圾收集器,上面的是新生代垃圾收集器,下面为老年代垃圾收集器,G1收集器收集范围在整个
新生代和老年代,连线的收集器表示两个收集器可以搭配使用.
首先说明:
并行(Parallel):指多条垃圾收集线程并行工作,但此时用户线程仍然处于等待状态。
并发(Concurrent):指用户线程与垃圾收集线程同时执行(但不一定是并行的,可能会交替执行),
用户程序在继续运行,而垃圾收集程序运行于另一个CPU上。

1.Serial收集器(串行GC)
      Serial收集器,顾名思义,这个收集器是单线程收集器,他单线程的意思有两点,一是只会使用
一个cpu或者一个线程去执行垃圾收集的动作,二是在垃圾收集的时候需要停止其他的所有工作线程
(stop the world 以下STW).该收集器现在作为client端默认的收集器.该垃圾收集器使用的垃圾回
收算法:复制算法.

2.ParNew收集器(并行GC)
      Serial收集器的多线程版本,该垃圾收集器使用多个线程去执行垃圾收集. 和Serial收集器相
比较而言,一随着Cpu数量上升,ParNew收集器性能越来越高于Serial收集器.二ParNew在需要server
端的虚拟机中作为默认垃圾收集器.回收算法同Serial收集器.

3.Prallel Scavenge收集器(并行回收GC)
      Prallel Scavenge收集器和ParNew收集器一样,使用同样的垃圾回收算法,同样使用多个线程
去执行垃圾收集. 和CMS垃圾收集器关注垃圾收集时间不同的是,Prallel Scavenge收集器主要关注点
是在吞吐量(吞吐量= 程序运行时间/(程序运行时间+垃圾回收时间)),所以Pra Scavenge收集器使用
场景是在后台计算不需要太多用户交互的地方.该收集器可以设置垃圾收集时间和吞吐量给虚拟机,虚拟
机会自适应的调整.自适应调节也是该收集器和ParNew收集器一个重要的区别.

4.Serial Old收集器(串行GC)
      Serial Old是Serial收集器的老年代版本,同样使用单线程去执行,主要使用在client端,如果
使用在server端,一般作为cms的后备方案,使用标记整理算法.

5.Parallel Old收集器(并行GC)
      Parallel Old收集器是Parallel Scavenge收集器的老年代版本,使用多线程去执行使用标记
整理算法.

6.CMS收集器(并发GC)
      CMS收集器是一种以获取最短停顿时间为目标的垃圾收集器,CMS是基于标记清除算法实现的,整
个垃圾收集的过程分为4个过程.
          1.初始标记
          2.并发标记
          3.重新标记
          4.并发清除
      CMS收集器虽然是并发GC的,但是还是有停顿
时间的,在初始标记和重新标记的过程还是需要停顿其他用户线程(STW),初始标记是标记处GC ROOTS
能直接关联到的对象,速度很快,并发标记阶段是进行GC ROOTS 根搜索算法阶段,判定对象是否存活.
重新标记阶段是修正并发期间由于用户程序运行导致标记产生变动的那一部分对象的标记记录.在这个
四个阶段耗时最长的阶段是并发标记和并发清除阶段,这两个阶段都是可用户线程一起工作,所以从整体
上来看,CMS收集器垃圾回收的过程 和用户线程是并发执行的.
      CMS有点就是停顿时间短,但是还有有以下几个缺点:
1.CMS收集器对cpu非常敏感,并发执行不会让用户线程停顿,但是在收集过程中需要占用cpu资源,导致
应用程序变慢,吞吐量变小.
2.由于在并发清除阶段是并发执行的,所以在并发清除阶段产生的垃圾不能被清除,只能放在下次GC是在
清除,这部分的垃圾称之为"浮动垃圾".
3.在并发清除阶段由于程序还要继续执行,需要预留一部分空间以供使用,所以不能像其他的收集器一样
等到老年代满了在收集垃圾,默认情况下在老年代使用到达68%时激活垃圾回收,如果在垃圾回收的过程
中,发生老年代空间不够用的时候,会发生Concurrent Mode Failure,这个时候虚拟机就会启用备用方案,
Serial Old收集器来重新对老年代来收集,但是这个时候停顿时间就更长了.
4.还有个问题就是CMS收集器是基于标记清除算法的,所以会有空间碎片过多的问题,当有大的对
象需要分配的时候,可能会发生FULL GC.所以CMS收集器默认设置了每当FULL GC的时候开启内存碎片
整理合并的过程,这样碎片的问题就被解决了,但是停顿时间就边长了.所以提供了一个参数
-XX:CMSFullGCsBeforeCompaction,这个参数是用于设置执行多少次不压缩的Full GC后,跟着来
一次带压缩的(默认值为0,表示每次进入Full GC时都进行碎片整理).

7.G1收集器(并发GC)
    分代收集:与其他收集器一样,分代概念在G1中依然得以保留。 虽然G1可以不需要其他收集器配
合就能独立管理整个GC堆,但它能够采用不同的方式去处理新创建的对象和已经存活了一段时间、 熬
过多次GC的旧对象以获取更好的收集效果。
    空间整合:与CMS的“标记—清理”算法不同,G1从整体来看是基于“标记—整理”算法实现的收集器,
从局部(两个Region之间)上来看是基于“复制”算法实现的,但无论如何,这两种算法都意味着G1运
作期间不会产生内存空间碎片,收集后能提供规整的可用内存。 这种特性有利于程序长时间运行,分
配大对象时不会因为无法找到连续内存空间而提前触发下一次GC。
      可预测的停顿:这是G1相对于CMS的另一大优势,降低停顿时间是G1和CMS共同的关注点,但G1
除了追求低停顿外,还能建立可预测的停顿时间模型,能让使用者明确指定在一个长度为M毫秒的时间
片段内,消耗在垃圾收集上的时间不得超过N毫秒,这几乎已经是实时Java(RTSJ)的垃圾收集器的特
征了。在G1之前的其他收集器进行收集的范围都是整个新生代或者老年代,而G1不再是这样。 使用G1
收集器时,Java堆的内存布局就与其他收集器有很大差别,它将整个Java堆划分为多个大小相等的独
立区域(Region),虽然还保留有新生代和老年代的概念,但新生代和老年代不再是物理隔离的了,它
们都是一部分Region(不需要连续)的集合。G1收集器之所以能建立可预测的停顿时间模型,是因为
它可以有计划地避免在整个Java堆中进行全区域的垃圾收集。 G1跟踪各个Region里面的垃圾堆积的价
值大小(回收所获得的空间大小以及回收所需时间的经验值),在后台维护一个优先列表,每次根据允
许的收集时间,优先回收价值最大的Region(这也就是Garbage-First名称的来由)。 这种使用Region
划分内存空间以及有优先级的区域回收方式,保证了G1收集器在有限的时间内可以获取尽可能高的收
集效率。

一些垃圾回收常见参数设置:


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,033评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,725评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,473评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,846评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,848评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,691评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,053评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,700评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,856评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,676评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,787评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,430评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,034评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,990评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,218评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,174评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,526评论 2 343

推荐阅读更多精彩内容