关闭

JVM垃圾收集器使用调查:CMS最受欢迎

2654人阅读 评论(0) 收藏 举报
分类:
近日,Plumbr公司对特定垃圾收集器(GC)使用情况进行了一次调查研究。 

本次研究的数据来自代表2670个不同使用环境的84936个案例。其中,13%的环境已经明确指定了一个垃圾收集器,其余的根据JVM而定。在指定了明确垃圾收集器的11062个案例中,根据每个垃圾收集器使用的统计次数,研究人员做出了下面的垃圾收集器饼图: 


 
GC使用统计

名词解释 
  • Serial:串行收集器,当进行垃圾收集时,会暂停所有线程
  • Parallel:并行收集器,是串行收集器的多线程版本,多CPU下
  • ParallelOld:老年代的Parallel版本
  • ConcMarkSweep:简称CMS,是并发收集器,将部分操作与用户线程并发执行
  • CMSIncrementalMode:CMS收集器变种,属增量式垃圾收集器,在并发标记和并发清理时交替运行垃圾收集器和用户线程
  • G1:面向服务器端应用的垃圾收集器,计划未来替代CMS收集器
87%的案例没有指定垃圾收集器 

在解释垃圾收集器使用情况的详情之前,我们先看下其他87%的案例为什么没有出现在上面的饼图中。从研究结果来看,有2个不同的原因导致了该情况的出现: 

  • JVM对于默认情况的处理十分合理,开发人员无需指定垃圾收集器
  • 对部分团队来说,程序性能可能优先级不高,致使没有指定垃圾收集器
所以,研究团队没有采用使用默认垃圾收集器的JVM案例。话又说回来,默认的垃圾收集器又是什么呢?这个问题既简单又复杂。如果你运行在JVM的客户端模式(Client)下,JVM默认垃圾收集器是串行垃圾收集器(Serial GC,-XX:+USeSerialGC);在JVM服务器模式(Server)下默认垃圾收集器是并行垃圾收集器(Parallel GC,-XX:+UseParallelGC)。至于是运行在JVM的客户端模式还是服务器模式,取决于下面情况: 

 
JVM客户端/服务器模式


大多数案例没有做出最佳选择 

让我们回到已经明确指定垃圾收集器的13%的案例,但仅有一小部分用户的决策是按照上述表格中的建议进行的。据统计,只有31个案例根据自己的机器性能选择了最佳的串行垃圾收集器,考虑到当前服务大多运行在多核服务器上,这个可以理解。 


 
垃圾收集器使用类型统计

我们从上图可以看出,并行(Parallel)和ParallelOld使用次数很接近。如果觉得并行模式这一新生代收集器更符合你的需求,那就选择它。从第一张表格中我们也可以看出,并行垃圾收集器(Parallel)已经是大多数平台的默认选择。从这个方面讲,如果没有指定明确的垃圾收集器,也并不意味着默认使用的垃圾收集器不流行。 

说到CMSIncrementalMode的使用情况,只有935个环境使用了该种垃圾收集器,相比而言,经典的CMS(ConcMarkSweep)则有6655个环境使用了它。这里提示下大家,在并发阶段,垃圾收集器线程会使用一个或多个处理器。增量式垃圾收集器是通过一定的回收算法,把一个长时间的中断,划分为很多个小的中断,以减少垃圾收集器对用户程序的影响。 

研究中还有一个结果就是G1的采用率,有826个环境使用了该种垃圾收集器。但同等条件来讲,G1比CMS性能表现会差一些。 

以上就是本次研究的结果,希望对各位有用。 
0
0
查看评论

JVM 调优和垃圾回收器说明

JVM垃圾收集算法       JVM垃圾收集算法有四种:标记-清除算法、复制算法、标记-整理算法、分代收集算法       标记-清除算法:       该算法如同它的名字一样,分...
  • zhuangyalei
  • zhuangyalei
  • 2016-06-04 20:19
  • 8159

查看JVM使用的什么垃圾收集器

查看JVM使用的什么垃圾收集器
  • earthhour
  • earthhour
  • 2017-07-31 20:26
  • 2231

JVM垃圾回收算法及回收器详解

本文主要讲述JVM下几种常见的垃圾回收算法和相关的垃圾回收器,以及常见的和GC相关的性能调优参数。 垃圾回收算法 标记清除 标记-清除算法将垃圾回收分为两个阶段:标记阶段和清除阶段。在标记阶段首先通过根节点,标记所有从根节点开始的对象,未被标记的对象就是未被引用的垃圾对象。然后,在清除阶段,清除所有...
  • weixin_37730482
  • weixin_37730482
  • 2017-07-26 17:57
  • 120

查看jvm 默认的垃圾回收器

java -XX:+PrintCommandLineFlags -version 这条指令是默认执行在Path 环境 配置的jvm。
  • lxlmycsdnfree
  • lxlmycsdnfree
  • 2017-10-23 21:30
  • 84

深入理解JVM之四:详解垃圾收集器

前言前面已经对垃圾收集算法有了较为详细的介绍,这里我们将对JVM中具体的垃圾回收器进行介绍,在虚拟机规范中并没有对垃圾回收器如何实现具体介绍,因此每个厂商的垃圾回收器可能会完全不同,但是我们介绍的是基于JDK1.7之后的Hotspot虚拟机(包括前面对Java虚拟机的介绍也是基于jdk1.7版本的)...
  • u011116672
  • u011116672
  • 2016-03-27 21:39
  • 2356

JVM GC垃圾回收器详解

HotSpot JVM收集器               上面有7中收集器,分为两块,上面为新生代收集器,下面是老年代收集器。如果两个收集器之间存在连线,就说明它们可以搭配使用。 Serial(串行GC)收集器 Ser...
  • bigtree_3721
  • bigtree_3721
  • 2016-04-20 17:19
  • 1895

JVM垃圾收集器

各种收集器介绍: Serial收集器:单线程收集器,必须暂停其他所有的工作线程,默认client模式下新生代的收集器 ParNew收集器:Serial的多线程版本,一般在Servr模式下的新生代首选收集器,除Serial外,目前只有它能与CMS收集器配合工作,ParNew收集器在单cpu...
  • haitao111313
  • haitao111313
  • 2012-09-06 19:50
  • 2598

JVM 垃圾回收器工作原理及使用实例介绍

垃圾收集基础 Java 语言的一大特点就是可以进行自动垃圾回收处理,而无需开发人员过于关注系统资源,例如内存资源的释放情况。自动垃圾收集虽然大大减轻了开发人员的工作量,但是也增加了软件系统的负担。 拥有垃圾收集器可以说是 Java 语言与 C++语言的一项显著区别。在 C++语言中,程序员必须小心谨...
  • chenleixing
  • chenleixing
  • 2015-04-21 08:59
  • 2102

JVM垃圾收集器

HotSpot收集器 一、Serial收集器 特点:stop the world 增是jdk1.3.1之前,新生代收集器的唯一选择,单线程处理,且要求所有用户线程都暂停。 但是并不意味着其就是老而无用的,他也有着独特的优势,简单高效。他依然是在client模式下,新生代默认的收集器。因为其没有线程...
  • he523160876
  • he523160876
  • 2016-08-26 21:08
  • 609

JVM垃圾收集器使用调查:CMS最受欢迎

近日,Plumbr公司对特定垃圾收集器(GC)使用情况进行了一次调查研究。  本次研究的数据来自代表2670个不同使用环境的84936个案例。其中,13%的环境已经明确指定了一个垃圾收集器,其余的根据JVM而定。在指定了明确垃圾收集器的11062个案例中,根据每个垃圾收集器使用的统计...
  • huaishu
  • huaishu
  • 2013-11-29 09:56
  • 741
    个人资料
    • 访问:1560037次
    • 积分:13231
    • 等级:
    • 排名:第1198名
    • 原创:148篇
    • 转载:367篇
    • 译文:0篇
    • 评论:89条
    博客专栏
    文章分类
    最新评论