我希望能够追踪在GC上花费了多少时间以及收集了多少内存,但不想通过分析GC日志(即分析从-XX:+PrintGCWhatever得到的内容)来实现。
我发现可以使用Sun的ManagementFactory来获取一个GarbageCollectorMXBean,该Bean可以给出一些包含内存信息的GCInfo对象,但我无法保证可以通过这种方式收集所有 GC。
有人知道如何在代码中实现这个功能吗?
我希望能够追踪在GC上花费了多少时间以及收集了多少内存,但不想通过分析GC日志(即分析从-XX:+PrintGCWhatever得到的内容)来实现。
我发现可以使用Sun的ManagementFactory来获取一个GarbageCollectorMXBean,该Bean可以给出一些包含内存信息的GCInfo对象,但我无法保证可以通过这种方式收集所有 GC。
有人知道如何在代码中实现这个功能吗?
GarbageCollectorMXBean
是我在Sun JVM中能找到的最好的。根据我的经验,它实际上非常接近你所要求的。
我想你可以有一个专门的线程,定期唤醒以获取GC统计信息。这将增加收集统计信息的确定性。
鉴于获取此信息的工具范围,最好使用它们来分析您的GC行为并进行优化。例如,使用内存分析器。
您面临的问题是,除非该信息指向问题的解决方案(然后您可以修复它),否则该信息并不是非常有用。