摘要:近日,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个环境使用了它。这里提示下大家,在并发阶段,垃圾收集器线程会使用一个或多个处理器。增量式垃圾收集器是通过一定的回收算法,把一个长时间的中断,划分为很多个小的中断,以减少垃圾收集器对用户程序的影响。
相关推荐
本篇将详细讲解老年代垃圾收集器,主要包括SerialOld、ParallelOld以及CMS这三种常见收集器。 1. SerialOld收集器: SerialOld是Serial收集器的老年代版本,它采用单线程进行垃圾回收。这意味着在垃圾回收过程中,...
ParNew通常会与Serial Old或CMS(Concurrent Mark Sweep)收集器配合使用,其中Serial Old用于老年代的回收,而CMS则提供了并发的垃圾收集策略,减少了应用程序的暂停时间。 Parallel Scavenge收集器,与ParNew类似...
MySQL是世界上最受欢迎的关系型数据库管理系统之一,用于存储和管理数据。在学习MySQL的过程中,你需要掌握以下关键知识点: 1. 数据库基本概念:了解数据库是什么,它的作用,以及关系型数据库模型的基本原理,如...
常见的垃圾收集器包括Serial收集器、ParNew收集器、Parallel Scavenge收集器、SerialOld收集器、ParallelOld收集器、CMS收集器和G1收集器。每种收集器有其适用的场景和特点,如单线程与多线程、复制算法与标记-整理...
- 垃圾收集器:了解不同类型的垃圾收集器,如Serial、ParNew、CMS、G1等。 - 对象的生命周期:理解可达性分析和引用类型,如强引用、软引用、弱引用和虚引用。 9. **网络编程** - Socket通信:理解TCP和UDP协议...
这本书的内容是帮你全面了解java虚拟机,本书第1版两年内印刷近10次,98%以上的评论全部为5星级的好评,是整个Java图书领域公认的经典著作和超级畅销书,繁体版在台湾也十分受欢迎。第2版在第1版的基础上做了很大的...
Java是世界上最受欢迎的编程语言之一,特别是在企业级应用开发中,它扮演着核心角色。这份“java部分面试题答案.7z”压缩包文件包含了多个关键领域的面试专题及其答案,涵盖了从基础到高级的Java技术,包括并发编程...
9. **JVM内存管理**:理解堆内存、栈内存、方法区、本地方法栈的结构,以及垃圾回收(GC)机制,包括新生代、老年代、CMS、G1等垃圾收集器的工作原理。 10. **数据库操作**:SQL基础,包括CRUD操作、事务处理、索引...
垃圾收集(GC)和内存管理也是面试的重点,需要了解不同类型的垃圾收集器和内存区域,如新生代、老年代、CMS、G1等。 JVM(Java虚拟机)优化是面试的高阶话题,包括类加载机制、JVM调优参数、性能监控工具(如...