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