阅读更多

13顶
0踩

编程语言

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

2013-11-28 18:32 by 见习编辑 tuhaihe 评论(6) 有14464人浏览
近日,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性能表现会差一些。

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

Via Plumbr
  • 大小: 80.2 KB
  • 大小: 6.2 KB
  • 大小: 59.7 KB
13
0
评论 共 6 条 请登录后发表评论
6 楼 git_for_java 2013-12-03 09:43
G1 是趋势
5 楼 powerful 2013-11-29 14:10
G1并不见得性能比CMS差吧?关键现在还有很多系统使用是Java7以下的版,从Java7u9之后G1才成熟了。
4 楼 ray_linn 2013-11-29 12:51
这说明java在client端基本没人用吧。
3 楼 sohuexe 2013-11-29 11:36
C4如果开源就好了
2 楼 spiritfrog 2013-11-29 11:03
为毛i586+windows 默认就是client模式,用串行收集器?
1 楼 junfengcode 2013-11-28 19:30
服务器应用一直在用CMS,效果还是挺明显的

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

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

    在明确指定垃圾收集器的13%的案例中,并发收集器(CMS)使用次数最多;但大多数案例没有选择最佳垃圾收集器。 近日,Plumbr公司对特定垃圾收集器(GC)使用情况进行了一次调查研究。 本次研究的数据来自代表2670...

  • 【JVM技术专题】 性能调优之CMS垃圾回收器「上篇」

    如果没有冬天,春天不会如此悦人;如果没有偶尔的不幸,幸运不会如此受人欢迎。

  • JVM--Garbage First(G1) 垃圾收集器

    G1是一款非常优秀的垃圾收集器,不仅适合堆内存大的应用,同时也简化了调优的工作。通过主要的参数初始和最大堆空间、以及最大容忍的GC暂停目标,就能得到不错的性能;同时,我们也看到G1对内存空间的浪费较高,但...

  • 详解 JVM Garbage First(G1) 垃圾收集器

    Garbage First(G1)是垃圾收集领域的最新成果,同时也是HotSpot在JVM上力推的垃圾收集器,并赋予取代CMS的使命。如果使用Java 8/9,那么有很大可能希望对G1收集器进行评估。本文详细首先对JVM其他的垃圾收集器进行...

  • JVM--怎么选择一款合适的垃圾收集器

    JVM–怎么选择一款合适的垃圾收集器 echo编辑整理。欢迎添加echo微信(微信号:t2421499075)交流学习。该文章不支持转载,主要内容来自读书笔记和网络博客,以及视频学习整理。 参考资料列表: jdk不同版本的垃圾收集...

  • JVM G1(Garbage First)垃圾收集器

    之前的几个垃圾收集器组合都有几个共同的特点: 年轻代、老年代是独立且连续的内存块; 年轻代收集使用单eden、双survivor进行复制算法; 老年代收集必须扫描整个老年代区域; 都是以尽可能少而快地执行GC为设计...

  • 深度学习与总结JVM专辑(三):垃圾回收器—G1(图文+代码)

    垃圾收集器G1 前言 概述 停顿时间模型 内存布局 传统内存布局过时了 G1实现的几个关键细节问题 铺垫知识:跨代引用 铺垫知识:记忆集,卡表,卡页 铺垫知识:写屏障 插眼往下看 G1内存模型 分区Region 卡片Card 堆...

  • 深入解析JVM内存结构:Metaspace、堆与垃圾收集器

    Java 8引入Metaspace取代永久代,字符串常量池移至堆,G1垃圾收集器取代CMS,Lambda表达式带来Metaspace挑战。开发者应根据应用需求调整内存大小,选择适当垃圾收集器,关注Metaspace使用。

  • jvm-垃圾收集器与内存分配策略

    垃圾收集器与内存分配策略 参考: https://my.oschina.net/hosee/blog/644085 http://www.cnblogs.com/zhguang/p/Java-JVM-GC.html http://www.cnblogs.com/zhguang/p/3257367.html 1. GC的概念 Garbage ...

  • JVM:自动内存管理-垃圾收集器与内存分配策略

    JVM:自动内存管理-垃圾收集器与内存分配策略 Java与C++之间有一堵由内存分配和垃圾收集技术所围成的高墙,墙外面的人想进去,墙里面的人却想出来。 一、概述:Java堆和方法区这两个区域有着很显著的不确定性 二、...

  • JVM垃圾收集器与HotSpot的算法细节

    主要介绍HotSpot的算法细节实现、以及经典的垃圾收集器!

  • 4.JVM-垃圾收集器

    文章目录1.... 垃圾收集器2.1. 垃圾收集方式2.1.1. Minor GC 次要2.1.2. Major GC 重要2.1.3. Full GC 充分2.2. 新生代收集器2.2.1. Serial收集器2.2.2. ParNew收集器2.2.3. Parallel Scavenge收集器2.3...

  • JVM虚拟机学习--GC垃圾收集器发展史

    GC垃圾收集器从JDK1.3至今,发展出一大批垃圾收集器。它们不断完善,回收机制越来越复杂。为消除或减少工作线程因内存回收...是最古老,最基本的一款垃圾收集器,由于初代没有考虑到太多性能问题,它是唯一一个单线...

  • JVM面试(六)-G1垃圾收集器

    虽然分区使得内存分配不再要求紧凑的内存空间,但G1依然使用了分代的思想与其他垃圾收集器类似,G1 将内存 在逻辑上 划分为 年轻代和老年代,其中年轻代又划分为Eden空间和Survivor空间 但年轻代空间并不是固定不变...

  • JVM-垃圾收集器之G1

    G1垃圾回收器

  • 基于java的贝儿米幼儿教育管理系统答辩PPT.pptx

    基于java的贝儿米幼儿教育管理系统答辩PPT.pptx

  • 课设毕设基于SpringBoot+Vue的养老院管理系统的设计与实现源码可运行.zip

    本压缩包资源说明,你现在往下拉可以看到压缩包内容目录 我是批量上传的基于SpringBoot+Vue的项目,所以描述都一样;有源码有数据库脚本,系统都是测试过可运行的,看文件名即可区分项目~ |Java|SpringBoot|Vue|前后端分离| 开发语言:Java 框架:SpringBoot,Vue JDK版本:JDK1.8 数据库:MySQL 5.7+(推荐5.7,8.0也可以) 数据库工具:Navicat 开发软件: idea/eclipse(推荐idea) Maven包:Maven3.3.9+ 系统环境:Windows/Mac

  • 基于java的消防物资存储系统答辩PPT.pptx

    基于java的消防物资存储系统答辩PPT.pptx

  • 【java毕业设计】饮食营养管理信息系统源码(springboot+vue+mysql+说明文档).zip

    项目经过测试均可完美运行! 环境说明: 开发语言:java jdk:jdk1.8 数据库:mysql 5.7+ 数据库工具:Navicat11+ 管理工具:maven 开发工具:idea/eclipse

Global site tag (gtag.js) - Google Analytics