hotspot 垃圾收集器
在我最近的博客文章“ 确定活动的HotSpot垃圾收集器”中 ,我描述了可用于确定HotSpot JVM (Java进程)正在使用的垃圾收集器(当从命令行参数(标志)中变得不明显时)的不同方法。传递给Java启动器 。 对于重要的Java应用程序,我倾向于使用Java启动器显式指定适当的垃圾收集器标志,以免对使用哪个收集器产生任何疑问: -XX:+UseParallelGC
( 或 -XX:+UseParallelOldGC
)用于并行/吞吐量收集器 , -XX:+UseConcMarkSweepGC
用于并行标记扫描 (CMS)收集器, -XX:+UseG1GC
用于垃圾优先垃圾收集器 , -XX:+UseSerialGC
用于串行垃圾收集器 。
如果未明确指定所有垃圾收集器JVM标志,则虚拟机将选择垃圾收集器,并且可以使用JDK命令行工具jcmd或其相关的JMX MBean实现DiagnosticCommandMBean (通常通过JConsole)来标识VM选择了哪个垃圾收集器。 或VisualVM )。 在某些情况下,由于不存在我之前的列表中存在的特定HotSpot JVM标志,所以指定了特定的垃圾收集器。 在本文中,我将简要介绍以下内容之一: -Xincgc
。
Oracle为Java启动器java
提供的JDK工具和实用程序文档简要描述了-Xincgc
。 Java SE 6的java
可执行文件和Java SE 7的java
可执行文件的-Xincgc
描述了-Xincgc
:“启用增量垃圾收集器。 增量垃圾收集器(默认情况下处于关闭状态)将减少程序执行期间偶尔出现的长时间垃圾收集暂停。 增量垃圾收集器有时会与程序并发执行,在此期间将减少程序可用的处理器容量。”
-Xincgc
的java
文档状态的Java SE 8版本:“启用增量垃圾收集。 JDK 8中不推荐使用此选项,而无需替换。” 从Java 8开始不推荐使用增量收集器,这在《 JDK 8兼容性指南 》的“ 不推荐使用的API ”部分中得到了确认:“ -Xincgc
选项不推荐使用。” 有关为什么在JDK 8中不赞成使用此垃圾收集组合和其他垃圾收集组合的更多详细信息,请参见JEP 173 (“淘汰一些很少使用的GC组合”)和JEP 214 (“删除JDK 8中不推荐使用的GC组合”)。
看来-Xincgc
在JDK 8之后将不可用。对于支持-Xincgc
的JVM版本,一个问题可能是运行增量式垃圾收集器对于垃圾收集器而言意味着什么。 先前参考的《 JDK 8兼容性指南 》指出,“增量CMS”是现已弃用的“垃圾收集器组合”之一。 还已经指出 ,Java 6中的“ -Xincgc简单地转换”为“ -XX:+UseConcMarkSweepGC -XX:+CMSIncrementalMode
。 接下来的两个屏幕快照展示了Java 8中小型,简单的Java应用程序的情况。 第一个快照描述了在指定和不指定-Xincgc
情况下相同可执行JAR( -jar
)的运行。 第二个快照描述了为同一应用程序选择的不同VM选择的命令行标志,这些标志是指定或不指定-Xincgc
的结果。
这些屏幕快照表明, 未指定-Xincgc
时,用于此简单可执行JAR应用程序的Java 8 VM选择并行/吞吐量收集器( -XX:+UseParallelGC
),并选择带有附加标志的CMS收集器( -XX:+UseConcMarkSweepGC
) -XX:+CMSIncrementalMode
时-Xincgc
明确规定。 还值得指出的是,当使用-Xincgc
运行Java 8 HotSpot Java启动器时,会显示一条弃用警告消息(我已强调 ):“ Java HotSpot(TM)64位服务器VM警告:使用增量CMS是不推荐使用,可能会在将来的版本中删除。”
我认为值得在与垃圾回收相关的不赞成使用的JVM标志上发布,因为可以从此讨论中进行一些高级观察:
- 除了直接指定特定垃圾收集器的HotSpot VM标志外,其他标志也可以暗示垃圾收集器。
- jcmd工具不仅在不提供JVM标志的情况下,而且对于使用暗示特定收集器的标志(例如
-Xincgc
表示CMS收集器)的情况,都有助于识别使用哪个垃圾收集器。 。 - 增量CMS收集器即将消失。 任何考虑升级到Java 9的人都可能会发现,应谨慎检查其应用程序使用的VM标志,以识别当前正在使用增量CMS收集器(
-Xincgc
)的情况。 如果在Java 8上运行,则应该已经有弃用警告,如本文所展示。 - 这提醒我们,尽管Java和JVM在很大程度上仍是向后兼容的语言和平台,但某些功能和功能有时会被删除(通常很少使用或存在严重缺陷的功能)。
翻译自: https://www.javacodegeeks.com/2016/05/hotspot-incremental-java-garbage-collector.html
hotspot 垃圾收集器