通过 GarbageCollectorMXBean 确定 GC 类型

Determining GC type via GarbageCollectorMXBean

我正在阅读 this excellent answer on grabbing Java garbage collection activity info and noticed that the GarbageCollectorMXBean 没有关于它是什么类型 的任何数据(次要、主要、完整等)。

我想知道:是否有可能(通过 Java 代码)确定特定 GC 是次要的、主要的还是完整的?

从 GarbageCollectorMXBean 的汇总统计信息中打印周期性 GC 统计信息不会为您提供此类信息。如果您使用的是 Java 1.7+,您可以订阅来自每个 GarbageCollectorMXBean 实例的 JMX 通知,您将收到每个 GC 事件的通知,这将为您提供有关每个单独事件的更多详细信息。通知的 UserData 将包含类型的实例 GarbageCollectionNotificationInfo. The attribute GcAction will tell you if it was major or minor, and GcCause 将告诉您 GC 事件原因。

请注意,这引用了 com.sun 包并假定使用 HotSpot JVM。您可以避免使用纯 JMX 和 OpenType 推理在代码中引用 com.sun 包,但要谨慎假设这将适用于所有 Java 1.7 JVM。