`
xp9802
  • 浏览: 1219055 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

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

    博客分类:
  • JVM
阅读更多

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

近日,Plumbr公司对特定垃圾收集器(GC)使用情况进行了一次调查研究。

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

 

各垃圾收集器使用比例统计饼图

 

名词解释

  • 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个环境使用了它。这里提示下大家,在并发阶段,垃圾收集器线程会使用一个或多个处理器。增量式垃圾收集器是通过一定的回收算法,把一个长时间的中断,划分为很多个小的中断,以减少垃圾收集器对用户程序的影响。
分享到:
评论

相关推荐

    Java垃圾回收(二)老年代垃圾收集器(csdn)————程序.pdf

    本篇将详细讲解老年代垃圾收集器,主要包括SerialOld、ParallelOld以及CMS这三种常见收集器。 1. SerialOld收集器: SerialOld是Serial收集器的老年代版本,它采用单线程进行垃圾回收。这意味着在垃圾回收过程中,...

    02垃圾回收器1

    ParNew通常会与Serial Old或CMS(Concurrent Mark Sweep)收集器配合使用,其中Serial Old用于老年代的回收,而CMS则提供了并发的垃圾收集策略,减少了应用程序的暂停时间。 Parallel Scavenge收集器,与ParNew类似...

    记录一些自己学习MySQL,JUC,JVM的学习笔记.zip

    MySQL是世界上最受欢迎的关系型数据库管理系统之一,用于存储和管理数据。在学习MySQL的过程中,你需要掌握以下关键知识点: 1. 数据库基本概念:了解数据库是什么,它的作用,以及关系型数据库模型的基本原理,如...

    2021最新Java面试题及答案V2.0.pdf

    常见的垃圾收集器包括Serial收集器、ParNew收集器、Parallel Scavenge收集器、SerialOld收集器、ParallelOld收集器、CMS收集器和G1收集器。每种收集器有其适用的场景和特点,如单线程与多线程、复制算法与标记-整理...

    java经典面试笔试题

    - 垃圾收集器:了解不同类型的垃圾收集器,如Serial、ParNew、CMS、G1等。 - 对象的生命周期:理解可达性分析和引用类型,如强引用、软引用、弱引用和虚引用。 9. **网络编程** - Socket通信:理解TCP和UDP协议...

    Java虚拟机

    这本书的内容是帮你全面了解java虚拟机,本书第1版两年内印刷近10次,98%以上的评论全部为5星级的好评,是整个Java图书领域公认的经典著作和超级畅销书,繁体版在台湾也十分受欢迎。第2版在第1版的基础上做了很大的...

    java部分面试题答案.7z

    Java是世界上最受欢迎的编程语言之一,特别是在企业级应用开发中,它扮演着核心角色。这份“java部分面试题答案.7z”压缩包文件包含了多个关键领域的面试专题及其答案,涵盖了从基础到高级的Java技术,包括并发编程...

    大公司JAVA面试试题

    9. **JVM内存管理**:理解堆内存、栈内存、方法区、本地方法栈的结构,以及垃圾回收(GC)机制,包括新生代、老年代、CMS、G1等垃圾收集器的工作原理。 10. **数据库操作**:SQL基础,包括CRUD操作、事务处理、索引...

    最新Java面试八股文10万字总结

    垃圾收集(GC)和内存管理也是面试的重点,需要了解不同类型的垃圾收集器和内存区域,如新生代、老年代、CMS、G1等。 JVM(Java虚拟机)优化是面试的高阶话题,包括类加载机制、JVM调优参数、性能监控工具(如...

Global site tag (gtag.js) - Google Analytics