如何通过查看gc日志来查看正在运行的垃圾收集器?

时间:2012-11-01 09:11:46

标签: java garbage-collection jvm

如何通过查看次要和主要集合的gc日志来查看正在运行的垃圾收集器(CMS,并行等)?我无法访问设置为java的命令行选项(appserver的sysadm不会让我看到它们)。我确实有相当详细的gc日志。

3 个答案:

答案 0 :(得分:3)

GC消息的确切格式取决于JVM版本和JVM设置。您可以在Oracle tutorial about GC tuning看到示例。

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

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

这意味着并行GC对我来说是DefNew。您可以查看此SO question以及其中一个答案参考this table,这可能会对您有所帮助。

UPDATE JDK 6中的默认Old Gen GC是ParallelOldGC,请参阅this enlightening pdf。特别是,您可以使用-XX:+UseConcMarkSweepGC JVM选项将Old Gen GC更改为较新的Concurrent-mark-sweep。

答案 1 :(得分:2)

引用了这本书" Java Performance"作者:Charlie Hunt,GC日志中使用的年轻代空间的名称随使用的GC而变化:

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

我不确定G1

答案 2 :(得分:1)

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

应启用

-XX:+PrintGCDetails以获取GC日志中的详细信息。