--- old/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/memory/Universe.java 2018-06-06 00:41:24.247427609 +0200 +++ new/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/memory/Universe.java 2018-06-06 00:41:23.990416541 +0200 @@ -24,17 +24,26 @@ package sun.jvm.hotspot.memory; -import java.io.*; -import java.util.*; -import sun.jvm.hotspot.debugger.*; +import java.io.PrintStream; +import java.util.Observable; +import java.util.Observer; + +import sun.jvm.hotspot.debugger.Address; +import sun.jvm.hotspot.debugger.OopHandle; import sun.jvm.hotspot.gc.cms.CMSHeap; -import sun.jvm.hotspot.gc.serial.SerialHeap; -import sun.jvm.hotspot.gc.shared.*; import sun.jvm.hotspot.gc.g1.G1CollectedHeap; -import sun.jvm.hotspot.gc.parallel.*; -import sun.jvm.hotspot.oops.*; -import sun.jvm.hotspot.types.*; -import sun.jvm.hotspot.runtime.*; +import sun.jvm.hotspot.gc.parallel.ParallelScavengeHeap; +import sun.jvm.hotspot.gc.serial.SerialHeap; +import sun.jvm.hotspot.gc.shared.CollectedHeap; +import sun.jvm.hotspot.gc.z.ZCollectedHeap; +import sun.jvm.hotspot.oops.Oop; +import sun.jvm.hotspot.runtime.BasicType; +import sun.jvm.hotspot.runtime.VM; +import sun.jvm.hotspot.runtime.VirtualConstructor; +import sun.jvm.hotspot.types.AddressField; +import sun.jvm.hotspot.types.CIntegerField; +import sun.jvm.hotspot.types.Type; +import sun.jvm.hotspot.types.TypeDataBase; public class Universe { @@ -72,16 +81,33 @@ }); } + private static boolean typeExists(TypeDataBase db, String type) { + try { + db.lookupType(type); + } catch (RuntimeException e) { + return false; + } + return true; + } + + private static void addHeapTypeIfInDB(TypeDataBase db, Class heapClass) { + String heapName = heapClass.getSimpleName(); + if (typeExists(db, heapName)) { + heapConstructor.addMapping(heapName, heapClass); + } + } + private static synchronized void initialize(TypeDataBase db) { Type type = db.lookupType("Universe"); collectedHeapField = type.getAddressField("_collectedHeap"); heapConstructor = new VirtualConstructor(db); - heapConstructor.addMapping("CMSHeap", CMSHeap.class); - heapConstructor.addMapping("SerialHeap", SerialHeap.class); - heapConstructor.addMapping("ParallelScavengeHeap", ParallelScavengeHeap.class); - heapConstructor.addMapping("G1CollectedHeap", G1CollectedHeap.class); + addHeapTypeIfInDB(db, CMSHeap.class); + addHeapTypeIfInDB(db, SerialHeap.class); + addHeapTypeIfInDB(db, ParallelScavengeHeap.class); + addHeapTypeIfInDB(db, G1CollectedHeap.class); + addHeapTypeIfInDB(db, ZCollectedHeap.class); mainThreadGroupField = type.getOopField("_main_thread_group"); systemThreadGroupField = type.getOopField("_system_thread_group");