3

我正在寻找一种技术来找出 Java VM 在给定时间点使用的垃圾收集(GC)策略(收集器)。(稍后,我希望它能够正确反映我选择的策略,比如说XX:+UseConcMarkSweepGC。)

verbose:gc(以其基本形式)没有帮助,因为它只是向我展示了它对每一代人所做的一切。我可以设置任何其他标志以使其吐出正在使用的 GC 策略吗?

JDK版本是1.6_21

4

4 回答 4

8

嗯..您当然可以通过 jconsole (VM Summary) 页面找出某个 JVM 正在使用什么策略。不确定影响它或改变它。

编辑:为了帮助您以编程方式检查和更改正在运行的 VM 的 JVM 标志,您可以使用jinfo.exeJDK 中的实用程序。例如,要检查是否设置了 ParallelGC 标志,您可以运行jinfo.exe -flag UseParallelGC <PID>

于 2010-09-07T06:34:41.900 回答
4

如果您想在运行时在 JVM 上运行的应用程序中获取此信息,则可以使用GarbageCollectorMXBean

List<GarbageCollectorMXBean> gcs =
  ManagementFactory.getGarbageCollectorMXBeans();
for (GarbageCollectorMXBean gc : gcs) {
  System.out.println(gc.getName());
}
于 2010-09-07T09:36:54.817 回答
1

您可以尝试 JDK 提供的 jinfo 实用程序。向此实用程序提供 JVM 进程 PID,它将显示传递给此 JVM 进程的所有通用参数。以下是相同的 URL:

http://download.oracle.com/javase/6/docs/technotes/tools/share/jinfo.html

希望能帮助到你。

于 2010-09-07T06:41:58.783 回答
0

同样,GC 行为可能会受到影响,但无法预测。

于 2010-09-07T06:30:57.120 回答