我正在寻找一种技术来找出 Java VM 在给定时间点使用的垃圾收集(GC)策略(收集器)。(稍后,我希望它能够正确反映我选择的策略,比如说XX:+UseConcMarkSweepGC
。)
verbose:gc
(以其基本形式)没有帮助,因为它只是向我展示了它对每一代人所做的一切。我可以设置任何其他标志以使其吐出正在使用的 GC 策略吗?
JDK版本是1.6_21
我正在寻找一种技术来找出 Java VM 在给定时间点使用的垃圾收集(GC)策略(收集器)。(稍后,我希望它能够正确反映我选择的策略,比如说XX:+UseConcMarkSweepGC
。)
verbose:gc
(以其基本形式)没有帮助,因为它只是向我展示了它对每一代人所做的一切。我可以设置任何其他标志以使其吐出正在使用的 GC 策略吗?
JDK版本是1.6_21
嗯..您当然可以通过 jconsole (VM Summary) 页面找出某个 JVM 正在使用什么策略。不确定影响它或改变它。
编辑:为了帮助您以编程方式检查和更改正在运行的 VM 的 JVM 标志,您可以使用jinfo.exe
JDK 中的实用程序。例如,要检查是否设置了 ParallelGC 标志,您可以运行jinfo.exe -flag UseParallelGC <PID>
:
如果您想在运行时在 JVM 上运行的应用程序中获取此信息,则可以使用GarbageCollectorMXBean:
List<GarbageCollectorMXBean> gcs =
ManagementFactory.getGarbageCollectorMXBeans();
for (GarbageCollectorMXBean gc : gcs) {
System.out.println(gc.getName());
}
您可以尝试 JDK 提供的 jinfo 实用程序。向此实用程序提供 JVM 进程 PID,它将显示传递给此 JVM 进程的所有通用参数。以下是相同的 URL:
http://download.oracle.com/javase/6/docs/technotes/tools/share/jinfo.html
希望能帮助到你。
同样,GC 行为可能会受到影响,但无法预测。