8

如何通过查看 gc 日志中的次要和主要收集来查看正在运行的垃圾收集器(CMS、Parallel 等)?我无权访问设置为 java 的命令行选项(应用服务器的 sysadm 不会让我看到它们)。我确实有相当冗长的 gc 日志。

4

3 回答 3

3

GC 消息的确切格式取决于 JVM 版本和 JVM 设置。您可以在有关 GC 调优的 Oracle 教程中查看示例。

DefNew是默认收集器。它是串行的还是并行的,选择哪一个取决于 JVM 版本/设置。您可以在 JDK 6 中使用java -XX:+PrintCommandLineFlags -version. 在我的系统上打印:

-XX:MaxHeapSize=1073741824 -XX:ParallelGCThreads=4 -XX:+PrintCommandLineFlags -XX:+UseParallelGC

这意味着并行 GCDefNew适合我。您可以检查这个SO question并且其中一个答案引用了此表,可能会对您有所帮助。

更新JDK 6 中的默认 Old Gen GC 是 ParallelOldGC,请参阅这个启发性的 pdf。特别是,您可以使用-XX:+UseConcMarkSweepGC JVM 选项将 Old Gen GC 更改为更新的 Concurrent-mark-sweep 之一。

于 2012-11-01T09:20:56.527 回答
2

引用 Charlie Hunt 的《Java Performance》一书,GC 日志中使用的年轻代空间的名称随着使用的 GC 而变化:

PSYoungGen => ParallelGC
ParNew =>  CMS
DefNew  => SerialGC

我不确定G1

于 2015-06-07T14:13:16.720 回答
1

您可以在本文中找到所有 HotSpot JVM 垃圾收集算法的 GC 日志示例。

-XX:+PrintGCDetails应该启用以在 GC 日志中查看该级别的详细信息。

于 2012-11-02T06:16:30.230 回答