src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/memory/Universe.java
changeset 50525 767cdb97f103
parent 50523 7b7c75d87f9b
child 51554 5b0d86499960
equal deleted inserted replaced
50524:04f4e983c2f7 50525:767cdb97f103
    22  *
    22  *
    23  */
    23  */
    24 
    24 
    25 package sun.jvm.hotspot.memory;
    25 package sun.jvm.hotspot.memory;
    26 
    26 
    27 import java.io.*;
    27 import java.io.PrintStream;
    28 import java.util.*;
    28 import java.util.Observable;
    29 import sun.jvm.hotspot.debugger.*;
    29 import java.util.Observer;
       
    30 
       
    31 import sun.jvm.hotspot.debugger.Address;
       
    32 import sun.jvm.hotspot.debugger.OopHandle;
    30 import sun.jvm.hotspot.gc.cms.CMSHeap;
    33 import sun.jvm.hotspot.gc.cms.CMSHeap;
       
    34 import sun.jvm.hotspot.gc.epsilon.EpsilonHeap;
       
    35 import sun.jvm.hotspot.gc.g1.G1CollectedHeap;
       
    36 import sun.jvm.hotspot.gc.parallel.ParallelScavengeHeap;
    31 import sun.jvm.hotspot.gc.serial.SerialHeap;
    37 import sun.jvm.hotspot.gc.serial.SerialHeap;
    32 import sun.jvm.hotspot.gc.shared.*;
    38 import sun.jvm.hotspot.gc.shared.CollectedHeap;
    33 import sun.jvm.hotspot.gc.g1.G1CollectedHeap;
    39 import sun.jvm.hotspot.gc.z.ZCollectedHeap;
    34 import sun.jvm.hotspot.gc.epsilon.EpsilonHeap;
    40 import sun.jvm.hotspot.oops.Oop;
    35 import sun.jvm.hotspot.gc.parallel.*;
    41 import sun.jvm.hotspot.runtime.BasicType;
    36 import sun.jvm.hotspot.oops.*;
    42 import sun.jvm.hotspot.runtime.VM;
    37 import sun.jvm.hotspot.types.*;
    43 import sun.jvm.hotspot.runtime.VirtualConstructor;
    38 import sun.jvm.hotspot.runtime.*;
    44 import sun.jvm.hotspot.types.AddressField;
       
    45 import sun.jvm.hotspot.types.CIntegerField;
       
    46 import sun.jvm.hotspot.types.Type;
       
    47 import sun.jvm.hotspot.types.TypeDataBase;
    39 
    48 
    40 
    49 
    41 public class Universe {
    50 public class Universe {
    42   private static AddressField collectedHeapField;
    51   private static AddressField collectedHeapField;
    43   private static VirtualConstructor heapConstructor;
    52   private static VirtualConstructor heapConstructor;
    71           initialize(VM.getVM().getTypeDataBase());
    80           initialize(VM.getVM().getTypeDataBase());
    72         }
    81         }
    73       });
    82       });
    74   }
    83   }
    75 
    84 
       
    85   private static boolean typeExists(TypeDataBase db, String type) {
       
    86       try {
       
    87           db.lookupType(type);
       
    88       } catch (RuntimeException e) {
       
    89           return false;
       
    90       }
       
    91       return true;
       
    92   }
       
    93 
       
    94   private static void addHeapTypeIfInDB(TypeDataBase db, Class heapClass) {
       
    95       String heapName = heapClass.getSimpleName();
       
    96       if (typeExists(db, heapName)) {
       
    97           heapConstructor.addMapping(heapName, heapClass);
       
    98       }
       
    99   }
       
   100 
    76   private static synchronized void initialize(TypeDataBase db) {
   101   private static synchronized void initialize(TypeDataBase db) {
    77     Type type = db.lookupType("Universe");
   102     Type type = db.lookupType("Universe");
    78 
   103 
    79     collectedHeapField = type.getAddressField("_collectedHeap");
   104     collectedHeapField = type.getAddressField("_collectedHeap");
    80 
   105 
    81     heapConstructor = new VirtualConstructor(db);
   106     heapConstructor = new VirtualConstructor(db);
    82     heapConstructor.addMapping("CMSHeap", CMSHeap.class);
   107     addHeapTypeIfInDB(db, CMSHeap.class);
    83     heapConstructor.addMapping("SerialHeap", SerialHeap.class);
   108     addHeapTypeIfInDB(db, SerialHeap.class);
    84     heapConstructor.addMapping("ParallelScavengeHeap", ParallelScavengeHeap.class);
   109     addHeapTypeIfInDB(db, ParallelScavengeHeap.class);
    85     heapConstructor.addMapping("G1CollectedHeap", G1CollectedHeap.class);
   110     addHeapTypeIfInDB(db, G1CollectedHeap.class);
    86     heapConstructor.addMapping("EpsilonHeap", EpsilonHeap.class);
   111     addHeapTypeIfInDB(db, EpsilonHeap.class);
       
   112     addHeapTypeIfInDB(db, ZCollectedHeap.class);
    87 
   113 
    88     mainThreadGroupField   = type.getOopField("_main_thread_group");
   114     mainThreadGroupField   = type.getOopField("_main_thread_group");
    89     systemThreadGroupField = type.getOopField("_system_thread_group");
   115     systemThreadGroupField = type.getOopField("_system_thread_group");
    90 
   116 
    91     boolArrayKlassField      = type.getAddressField("_boolArrayKlassObj");
   117     boolArrayKlassField      = type.getAddressField("_boolArrayKlassObj");