我正在阅读this excellent answer抓取Java垃圾收集活动信息,并注意到GarbageCollectorMXBean
没有关于收集的 type 的任何数据(Minor, Major,Full等。)。
我想知道:是否有可能弄清楚(来自Java代码)某个特定的GC是次要的,主要的还是完整的?
答案 0 :(得分:2)
从GarbageCollectorMXBean的摘要统计信息中打印定期GC统计数据不会为您提供该类型的信息。如果您使用的是Java 1.7+,则可以从每个GarbageCollectorMXBean实例订阅JMX通知,并且您将收到每个GC事件的通知,这将为您提供有关每个事件的更多详细信息。通知的UserData将包含GarbageCollectionNotificationInfo类型的实例。属性GcAction会告诉您它是主要还是次要,GcCause会告诉您GC事件的原因。
请注意,这会引用 com.sun 包并假定为HotSpot JVM。您可以避免使用纯JMX和OpenType推断来引用代码中的com.sun包,但要谨慎,假设它适用于所有Java 1.7 JVM。