< prev index next >

src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/memory/Universe.java

Print this page

        

@@ -22,21 +22,30 @@
  *
  */
 
 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 {
   private static AddressField collectedHeapField;
   private static VirtualConstructor heapConstructor;

@@ -70,20 +79,37 @@
           initialize(VM.getVM().getTypeDataBase());
         }
       });
   }
 
+  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");
 
     boolArrayKlassField      = type.getAddressField("_boolArrayKlassObj");
< prev index next >