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