揭阳专业做网站公司,江门网站制作培训,软件设计专业学什么,个人注册公司的条件StackOverflow问题查找正在运行哪种类型的垃圾收集 器#xff0c;jvm的默认垃圾收集器 #xff0c; 如何通过查看gc日志来查看正在运行的垃圾收集器#xff1f; #xff0c;以及如何知道HotSpot jvm的当前GC策略#xff1f; 和博客文章如何以编程方式获取GC信息表明了人们… StackOverflow问题查找正在运行哪种类型的垃圾收集 器jvm的默认垃圾收集器 如何通过查看gc日志来查看正在运行的垃圾收集器 以及如何知道HotSpot jvm的当前GC策略 和博客文章如何以编程方式获取GC信息表明了人们有时希望知道Java应用程序使用了哪个Java垃圾收集器。 在本文中我将介绍确定与Oracle HotSpot VM中运行的Java应用程序关联的垃圾收集器的一些最简单最常见的方法。 出于演示目的我将运行一个简单的Java应用程序。 该应用程序的代码对于演示如何确定适用的垃圾收集器并不重要。 可以使用命令java -cp stringInstantiationsDemo.jar dustin.examples.demo.IndefiniteRun运行简单的Java应用程序。 请注意对于要使用的垃圾收集器没有JVM标志的规范。 这意味着JVM将使用根据人体工程学选择的垃圾收集器。 确定所选垃圾收集器的一种简单方法是使用-XX PrintCommandLineFlags标志 我在博客文章JavaOne 2011HotSpot Performance命令行选项的权威集 中对此进行了描述。 该标志可以在命令java -XX:PrintCommandLineFlags -cp stringInstantiationsDemo.jar dustin.examples.demo.IndefiniteRun如以下屏幕快照所示 如最后一个屏幕快照所示使用-XX:PrintCommandLineFlags演示了-XX:UseParallelGC标志的存在该标志指示在这种情况下自动使用的收集器是并行收集器 也称为吞吐量收集器。 使用-XX:PrintCommandLineFlags可以使我们看到在启动新的Java应用程序时按人体工程学选择的垃圾收集器工作正常。 当我们想看到已经在运行的Java进程使用的垃圾收集器时 jcmd派上了用场我在jcmd文章中写道了这个有用的工具一个JDK命令行工具来统治他们 。 在下一个屏幕快照中jcmd进行了说明该屏幕快照演示了如何使用jcmd查看已经运行的Java应用程序的JVM命令行标志。 从上一张图像中我们看到可以使用jcmd pid VM.flags标识将指示正在使用的垃圾收集器的虚拟机标志。 在这种情况下我们再次看到-XX:UseParallelGC的存在指示并行/吞吐量垃圾收集器的使用。 我刚刚演示了如何使用jcmd查看隐式JVM参数该参数告诉我们在未明确指定垃圾收集器时为特定应用程序的VM自动选择了哪个垃圾收集器。 下两个图像显示JConsole和VisualVM不显示隐式JVM参数因此不显示未指定时自动使用的垃圾收集器。 尽管JConsole和VisualVM均未显示隐式Java虚拟机参数例如隐式选择的垃圾收集器但仍可以使用两种工具通过对象类型为java.lang:typeGarbageCollector JMX和GarbageCollectorMXBean来确定使用中的垃圾收集器。 对于本文到目前为止使用的简单应用程序它将是java.lang:typeGarbageCollector,namePS MarkSweep因为这是并行或吞吐量收集器。 接下来的两个屏幕快照中的JConsole和VisualVM 通过MBeans插件 对此进行了演示。 上面的示例演示了确定哪种垃圾收集器适用的三种基本方法。 下表针对先前演示的并行/吞吐量收集器以及其他两个主要的Oracle HotSpot JVM收集器 CMS和G1 总结了这些内容。 下表显示了确定上述一种方法在命令行 jcmd或JMX MXBean上明确指定使用哪个收集器并行CMS或G1时要查找的内容。 垃圾收集器 明确的命令行 jcmd VM.flags java.langtype GarbageCollectorname 并行 / 吞吐量 -XX:UseParallelOldGC -XX:UseParallelGC PS MarkSweep PS清道夫 并发标记扫描CMS -XX:UseConcMarkSweepGC 并发标记扫描 垃圾优先G1 -XX UseG1GC G1老一代 G1青年一代 尽管未在此处显示但从VisualVM或JConsole确定正在使用哪个收集器的另一种方法是使用 DiagnosticCommandMBean 来查找 VM.flags jcmd 提供VM标志一样如上所述。 在《 在JConsole和VisualVM中查看DiagnosticCommandMBean》 一文中我已经写了使用 DiagnosticCommandMBean 完成 jcmd 行为的 博客 。 JVM通常会阻止提供两个不同的垃圾收集器标志。 当两次尝试启动Java应用程序同时存在时将显示诸如“选项列表中的收集器组合冲突”的消息并且Java进程将不会启动。 因此只需要为与正在运行的Java应用程序关联的特定收集器标识一个标志即可知道正在使用哪个收集器。 这篇文章演示了多种简单的方法可用于确定在给定应用程序的JVM中应用了哪个HotSpot垃圾收集器。 翻译自: https://www.javacodegeeks.com/2016/04/determining-active-hotspot-garbage-collector.html