本文主要研究一下GarbageCollectionNotificationInfo
java.management/javax/management/openmbean/CompositeData.java
public interface CompositeData { public CompositeType getCompositeType(); public Object get(String key) ; public Object[] getAll(String[] keys) ; public boolean containsKey(String key) ; public boolean containsValue(Object value) ; public Collection<?> values() ; public boolean equals(Object obj) ; public int hashCode() ; public String toString() ; }
java.management/javax/management/openmbean/CompositeDataView.java
public interface CompositeDataView { public CompositeData toCompositeData(CompositeType ct); }
jdk.management/com/sun/management/GcInfo.java
public class GcInfo implements CompositeData, CompositeDataView { private final long index; private final long startTime; private final long endTime; private final Map<String, MemoryUsage> usageBeforeGc; private final Map<String, MemoryUsage> usageAfterGc; private final Object[] extAttributes; private final CompositeData cdata; private final GcInfoBuilder builder; private GcInfo(GcInfoBuilder builder, long index, long startTime, long endTime, MemoryUsage[] muBeforeGc, MemoryUsage[] muAfterGc, Object[] extAttributes) { this.builder = builder; this.index = index; this.startTime = startTime; this.endTime = endTime; String[] poolNames = builder.getPoolNames(); this.usageBeforeGc = new HashMap<String, MemoryUsage>(poolNames.length); this.usageAfterGc = new HashMap<String, MemoryUsage>(poolNames.length); for (int i = 0; i < poolNames.length; i++) { this.usageBeforeGc.put(poolNames[i], muBeforeGc[i]); this.usageAfterGc.put(poolNames[i], muAfterGc[i]); } this.extAttributes = extAttributes; this.cdata = new GcInfoCompositeData(this, builder, extAttributes); } private GcInfo(CompositeData cd) { GcInfoCompositeData.validateCompositeData(cd); this.index = GcInfoCompositeData.getId(cd); this.startTime = GcInfoCompositeData.getStartTime(cd); this.endTime = GcInfoCompositeData.getEndTime(cd); this.usageBeforeGc = GcInfoCompositeData.getMemoryUsageBeforeGc(cd); this.usageAfterGc = GcInfoCompositeData.getMemoryUsageAfterGc(cd); this.extAttributes = null; this.builder = null; this.cdata = cd; } public long getId() { return index; } public long getStartTime() { return startTime; } public long getEndTime() { return endTime; } public long getDuration() { return endTime - startTime; } public Map<String, MemoryUsage> getMemoryUsageBeforeGc() { return Collections.unmodifiableMap(usageBeforeGc); } public Map<String, MemoryUsage> getMemoryUsageAfterGc() { return Collections.unmodifiableMap(usageAfterGc); } public static GcInfo from(CompositeData cd) { if (cd == null) { return null; } if (cd instanceof GcInfoCompositeData) { return ((GcInfoCompositeData) cd).getGcInfo(); } else { return new GcInfo(cd); } } // Implementation of the CompositeData interface public boolean containsKey(String key) { return cdata.containsKey(key); } public boolean containsValue(Object value) { return cdata.containsValue(value); } public boolean equals(Object obj) { return cdata.equals(obj); } public Object get(String key) { return cdata.get(key); } public Object[] getAll(String[] keys) { return cdata.getAll(keys); } public CompositeType getCompositeType() { return cdata.getCompositeType(); } public int hashCode() { return cdata.hashCode(); } public String toString() { return cdata.toString(); } public Collection<?> values() { return cdata.values(); } public CompositeData toCompositeData(CompositeType ct) { return cdata; } }
jdk.management/com/sun/management/GarbageCollectionNotificationInfo.java
public class GarbageCollectionNotificationInfo implements CompositeDataView { private final String gcName; private final String gcAction; private final String gcCause; private final GcInfo gcInfo; private final CompositeData cdata; public static final String GARBAGE_COLLECTION_NOTIFICATION = "com.sun.management.gc.notification"; public GarbageCollectionNotificationInfo(String gcName, String gcAction, String gcCause, GcInfo gcInfo) { if (gcName == null) { throw new NullPointerException("Null gcName"); } if (gcAction == null) { throw new NullPointerException("Null gcAction"); } if (gcCause == null) { throw new NullPointerException("Null gcCause"); } this.gcName = gcName; this.gcAction = gcAction; this.gcCause = gcCause; this.gcInfo = gcInfo; this.cdata = new GarbageCollectionNotifInfoCompositeData(this); } GarbageCollectionNotificationInfo(CompositeData cd) { GarbageCollectionNotifInfoCompositeData.validateCompositeData(cd); this.gcName = GarbageCollectionNotifInfoCompositeData.getGcName(cd); this.gcAction = GarbageCollectionNotifInfoCompositeData.getGcAction(cd); this.gcCause = GarbageCollectionNotifInfoCompositeData.getGcCause(cd); this.gcInfo = GarbageCollectionNotifInfoCompositeData.getGcInfo(cd); this.cdata = cd; } public String getGcName() { return gcName; } public String getGcAction() { return gcAction; } public String getGcCause() { return gcCause; } public GcInfo getGcInfo() { return gcInfo; } public static GarbageCollectionNotificationInfo from(CompositeData cd) { if (cd == null) { return null; } if (cd instanceof GarbageCollectionNotifInfoCompositeData) { return ((GarbageCollectionNotifInfoCompositeData) cd).getGarbageCollectionNotifInfo(); } else { return new GarbageCollectionNotificationInfo(cd); } } public CompositeData toCompositeData(CompositeType ct) { return cdata; } }
{ "gcAction": "end of minor GC", "gcCause": "G1 Evacuation Pause", "gcInfo": { "compositeType": { "className": "javax.management.openmbean.CompositeData", "description": "CompositeType for GC info for G1 Young Generation", "typeName": "sun.management.G1 Young Generation.GcInfoCompositeType" }, "duration": 29, "endTime": 18593, "id": 38, "memoryUsageAfterGc": { "CodeHeap 'profiled nmethods'": { "committed": 8847360, "init": 2555904, "max": 122912768, "used": 8816000 }, "G1 Old Gen": { "committed": 88080384, "init": 17825792, "max": 524288000, "used": 62842880 }, "CodeHeap 'non-profiled nmethods'": { "committed": 2555904, "init": 2555904, "max": 122916864, "used": 1793408 }, "G1 Survivor Space": { "committed": 2097152, "init": 0, "max": -1, "used": 2097152 }, "Compressed Class Space": { "committed": 6160384, "init": 0, "max": 1073741824, "used": 5670976 }, "Metaspace": { "committed": 49676288, "init": 0, "max": -1, "used": 48404152 }, "G1 Eden Space": { "committed": 13631488, "init": 15728640, "max": -1, "used": 0 }, "CodeHeap 'non-nmethods'": { "committed": 2555904, "init": 2555904, "max": 5828608, "used": 1199360 } }, "memoryUsageBeforeGc": { "CodeHeap 'profiled nmethods'": { "committed": 8847360, "init": 2555904, "max": 122912768, "used": 8816000 }, "G1 Old Gen": { "committed": 89128960, "init": 17825792, "max": 524288000, "used": 59823984 }, "CodeHeap 'non-profiled nmethods'": { "committed": 2555904, "init": 2555904, "max": 122916864, "used": 1793408 }, "G1 Survivor Space": { "committed": 1048576, "init": 0, "max": -1, "used": 1048576 }, "Compressed Class Space": { "committed": 6160384, "init": 0, "max": 1073741824, "used": 5670976 }, "Metaspace": { "committed": 49676288, "init": 0, "max": -1, "used": 48404152 }, "G1 Eden Space": { "committed": 13631488, "init": 15728640, "max": -1, "used": 12582912 }, "CodeHeap 'non-nmethods'": { "committed": 2555904, "init": 2555904, "max": 5828608, "used": 1199360 } }, "startTime": 18564 }, "gcName": "G1 Young Generation" }
{ "gcAction": "end of major GC", "gcCause": "G1 Evacuation Pause", "gcInfo": { "compositeType": { "className": "javax.management.openmbean.CompositeData", "description": "CompositeType for GC info for G1 Old Generation", "typeName": "sun.management.G1 Old Generation.GcInfoCompositeType" }, "duration": 127, "endTime": 14107, "id": 2, "memoryUsageAfterGc": { "CodeHeap 'profiled nmethods'": { "committed": 9043968, "init": 2555904, "max": 122912768, "used": 9008768 }, "G1 Old Gen": { "committed": 50331648, "init": 15728640, "max": 67108864, "used": 50126800 }, "CodeHeap 'non-profiled nmethods'": { "committed": 2555904, "init": 2555904, "max": 122916864, "used": 1814144 }, "G1 Survivor Space": { "committed": 0, "init": 0, "max": -1, "used": 0 }, "Compressed Class Space": { "committed": 6160384, "init": 0, "max": 1073741824, "used": 5631528 }, "Metaspace": { "committed": 49676288, "init": 0, "max": -1, "used": 48270608 }, "G1 Eden Space": { "committed": 16777216, "init": 17825792, "max": -1, "used": 0 }, "CodeHeap 'non-nmethods'": { "committed": 2555904, "init": 2555904, "max": 5828608, "used": 1197696 } }, "memoryUsageBeforeGc": { "CodeHeap 'profiled nmethods'": { "committed": 9043968, "init": 2555904, "max": 122912768, "used": 9008768 }, "G1 Old Gen": { "committed": 65011712, "init": 15728640, "max": 67108864, "used": 64820264 }, "CodeHeap 'non-profiled nmethods'": { "committed": 2555904, "init": 2555904, "max": 122916864, "used": 1814144 }, "G1 Survivor Space": { "committed": 1048576, "init": 0, "max": -1, "used": 1048576 }, "Compressed Class Space": { "committed": 6160384, "init": 0, "max": 1073741824, "used": 5664624 }, "Metaspace": { "committed": 49676288, "init": 0, "max": -1, "used": 48375680 }, "G1 Eden Space": { "committed": 1048576, "init": 17825792, "max": -1, "used": 0 }, "CodeHeap 'non-nmethods'": { "committed": 2555904, "init": 2555904, "max": 5828608, "used": 1197696 } }, "startTime": 13980 }, "gcName": "G1 Old Generation" }
{ "gcAction": "end of major GC", "gcCause": "Warmup", "gcInfo": { "compositeType": { "className": "javax.management.openmbean.CompositeData", "description": "CompositeType for GC info for ZGC", "typeName": "sun.management.ZGC.GcInfoCompositeType" }, "duration": 6562, "endTime": 28676, "id": 2, "memoryUsageAfterGc": { "ZHeap": { "committed": 2145386496, "init": 2147483648, "max": 2147483648, "used": 656408576 }, "CodeHeap 'profiled nmethods'": { "committed": 9830400, "init": 2555904, "max": 122912768, "used": 9767424 }, "CodeHeap 'non-profiled nmethods'": { "committed": 2555904, "init": 2555904, "max": 122916864, "used": 2076288 }, "Metaspace": { "committed": 49020928, "init": 0, "max": -1, "used": 47278192 }, "CodeHeap 'non-nmethods'": { "committed": 2555904, "init": 2555904, "max": 5828608, "used": 1190528 } }, "memoryUsageBeforeGc": { "ZHeap": { "committed": 2145386496, "init": 2147483648, "max": 2147483648, "used": 444596224 }, "CodeHeap 'profiled nmethods'": { "committed": 9568256, "init": 2555904, "max": 122912768, "used": 9546880 }, "CodeHeap 'non-profiled nmethods'": { "committed": 2555904, "init": 2555904, "max": 122916864, "used": 2051968 }, "Metaspace": { "committed": 49020928, "init": 0, "max": -1, "used": 47895808 }, "CodeHeap 'non-nmethods'": { "committed": 2555904, "init": 2555904, "max": 5828608, "used": 1184768 } }, "startTime": 22114 }, "gcName": "ZGC" }
{ "gcAction": "end of major GC", "gcCause": "Allocation Rate", "gcInfo": { "compositeType": { "className": "javax.management.openmbean.CompositeData", "description": "CompositeType for GC info for ZGC", "typeName": "sun.management.ZGC.GcInfoCompositeType" }, "duration": 1028, "endTime": 288728, "id": 3, "memoryUsageAfterGc": { "ZHeap": { "committed": 2145386496, "init": 2147483648, "max": 2147483648, "used": 278921216 }, "CodeHeap 'profiled nmethods'": { "committed": 11206656, "init": 2555904, "max": 122912768, "used": 11141248 }, "CodeHeap 'non-profiled nmethods'": { "committed": 2555904, "init": 2555904, "max": 122916864, "used": 2198656 }, "Metaspace": { "committed": 49283072, "init": 0, "max": -1, "used": 48287392 }, "CodeHeap 'non-nmethods'": { "committed": 2555904, "init": 2555904, "max": 5828608, "used": 1184768 } }, "memoryUsageBeforeGc": { "ZHeap": { "committed": 2145386496, "init": 2147483648, "max": 2147483648, "used": 236978176 }, "CodeHeap 'profiled nmethods'": { "committed": 11010048, "init": 2555904, "max": 122912768, "used": 11005568 }, "CodeHeap 'non-profiled nmethods'": { "committed": 2555904, "init": 2555904, "max": 122916864, "used": 2197632 }, "Metaspace": { "committed": 48758784, "init": 0, "max": -1, "used": 47908112 }, "CodeHeap 'non-nmethods'": { "committed": 2555904, "init": 2555904, "max": 5828608, "used": 1184128 } }, "startTime": 287700 }, "gcName": "ZGC" }
{ "gcAction": "end of GC cycle", "gcCause": "No GC", "gcInfo": { "compositeType": { "className": "javax.management.openmbean.CompositeData", "description": "CompositeType for GC info for Shenandoah Cycles", "typeName": "sun.management.Shenandoah Cycles.GcInfoCompositeType" }, "duration": 18, "endTime": 1201551, "id": 5, "memoryUsageAfterGc": { "CodeHeap 'non-profiled nmethods'": { "committed": 9371648, "init": 2555904, "max": 244105216, "used": 9310592 }, "Shenandoah": { "committed": 54525952, "init": 4294967296, "max": 4294967296, "used": 34113640 }, "Compressed Class Space": { "committed": 5373952, "init": 0, "max": 1073741824, "used": 4724464 }, "Metaspace": { "committed": 37355520, "init": 0, "max": -1, "used": 35581640 }, "CodeHeap 'non-nmethods'": { "committed": 2555904, "init": 2555904, "max": 7553024, "used": 1209216 } }, "memoryUsageBeforeGc": { "CodeHeap 'non-profiled nmethods'": { "committed": 9306112, "init": 2555904, "max": 244105216, "used": 9300096 }, "Shenandoah": { "committed": 54525952, "init": 4294967296, "max": 4294967296, "used": 42502592 }, "Compressed Class Space": { "committed": 5373952, "init": 0, "max": 1073741824, "used": 4724464 }, "Metaspace": { "committed": 37355520, "init": 0, "max": -1, "used": 35581640 }, "CodeHeap 'non-nmethods'": { "committed": 2555904, "init": 2555904, "max": 7553024, "used": 1209216 } }, "startTime": 1201533 }, "gcName": "Shenandoah Cycles" }
{ "gcAction": "end of GC pause", "gcCause": "No GC", "gcInfo": { "compositeType": { "className": "javax.management.openmbean.CompositeData", "description": "CompositeType for GC info for Shenandoah Pauses", "typeName": "sun.management.Shenandoah Pauses.GcInfoCompositeType" }, "duration": 1, "endTime": 1201551, "id": 20, "memoryUsageAfterGc": { "CodeHeap 'non-profiled nmethods'": { "committed": 0, "init": 0, "max": 0, "used": 0 }, "Shenandoah": { "committed": 0, "init": 0, "max": 0, "used": 0 }, "Compressed Class Space": { "committed": 0, "init": 0, "max": 0, "used": 0 }, "Metaspace": { "committed": 0, "init": 0, "max": 0, "used": 0 }, "CodeHeap 'non-nmethods'": { "committed": 0, "init": 0, "max": 0, "used": 0 } }, "memoryUsageBeforeGc": { "CodeHeap 'non-profiled nmethods'": { "committed": 0, "init": 0, "max": 0, "used": 0 }, "Shenandoah": { "committed": 0, "init": 0, "max": 0, "used": 0 }, "Compressed Class Space": { "committed": 0, "init": 0, "max": 0, "used": 0 }, "Metaspace": { "committed": 0, "init": 0, "max": 0, "used": 0 }, "CodeHeap 'non-nmethods'": { "committed": 0, "init": 0, "max": 0, "used": 0 } }, "startTime": 1201550 }, "gcName": "Shenandoah Pauses" }