阅读更多

13顶
0踩

编程语言

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

2013-11-28 18:32 by 见习编辑 tuhaihe 评论(6) 有14387人浏览
近日,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垃圾回收器

  • chromedriver-win64_121.0.6123.0.zip

    chromedriver-win64_121.0.6123.0.zip

  • Chekiang Shu Ke Sung-mianfeiziti字體下載

    Chekiang Shu Ke Sung-mianfeiziti字體下載

  • 中国科学院大学22-23秋季学期 《程序设计基础与实验(C语言)》课程大作业——基于Min-Max搜索策略的五子棋对战程序

    C语言是一种广泛使用的编程语言,它具有高效、灵活、可移植性强等特点,被广泛应用于操作系统、嵌入式系统、数据库、编译器等领域的开发。C语言的基本语法包括变量、数据类型、运算符、控制结构(如if语句、循环语句等)、函数、指针等。在编写C程序时,需要注意变量的声明和定义、指针的使用、内存的分配与释放等问题。C语言中常用的数据结构包括: 1. 数组:一种存储同类型数据的结构,可以进行索引访问和修改。 2. 链表:一种存储不同类型数据的结构,每个节点包含数据和指向下一个节点的指针。 3. 栈:一种后进先出(LIFO)的数据结构,可以通过压入(push)和弹出(pop)操作进行数据的存储和取出。 4. 队列:一种先进先出(FIFO)的数据结构,可以通过入队(enqueue)和出队(dequeue)操作进行数据的存储和取出。 5. 树:一种存储具有父子关系的数据结构,可以通过中序遍历、前序遍历和后序遍历等方式进行数据的访问和修改。 6. 图:一种存储具有节点和边关系的数据结构,可以通过广度优先搜索、深度优先搜索等方式进行数据的访问和修改。 这些数据结构在C语言中都有相应的实现方式,可以应用于各种不同的场景。C语言中的各种数据结构都有其优缺点,下面列举一些常见的数据结构的优缺点: 数组: 优点:访问和修改元素的速度非常快,适用于需要频繁读取和修改数据的场合。 缺点:数组的长度是固定的,不适合存储大小不固定的动态数据,另外数组在内存中是连续分配的,当数组较大时可能会导致内存碎片化。 链表: 优点:可以方便地插入和删除元素,适用于需要频繁插入和删除数据的场合。 缺点:访问和修改元素的速度相对较慢,因为需要遍历链表找到指定的节点。 栈: 优点:后进先出(LIFO)的特性使得栈在处理递归和括号匹配等问题时非常方便。 缺点:栈的空间有限,当数据量较大时可能会导致栈溢出。 队列: 优点:先进先出(FIFO)的特性使得

  • 高级信息通信运行管理员第七套试卷

    这是高级信息通信运行管理员考证试卷

Global site tag (gtag.js) - Google Analytics