当使用以下args时,sun JVM会将详细的GC日志输出到StdOut。
-verbose:gc
-XX:+PrintGCTimeStamps
-XX:+PrintGCDetails
但是,我不希望StdOut中的输出,我真的不需要每个GC的细节。是否可以以编程方式访问用于这些日志的数据?我希望能够记录我自己的日志文件分配/收集的内存量,理想情况下是平均对象大小。
答案 0 :(得分:4)
您需要添加
-Xloggc:log_file_name
每次JVM启动时都会重新初始化此文件,因此如果您想将其保留以供分析,请不要忘记将其移至安全位置。
Java 6可以找到Java {1}}的许多命令行选项的完整列表。
答案 1 :(得分:0)
您可以使用JMX Bean for Memory Pools和GC。它们的优势在于您可以获得免费计划的计数器。缺点是,它们因各种VM供应商,版本和GC设置而不同。
例如
java.lang:type=GarbageCollector,name=Copy
CollectionCount, ColletionTime, LastGCInfo[1].duration,memoryUSageBefore/After
java.lang:type=GarbageCollector,name=MarkSweepCompact
CollectionCount, CollectionTime, LastGCInfo[1].duration,memoryUSageBefore/After
java.lang:type=Memory
HeapMemoryUsage[1].commited,init,max,used