agent/src/share/classes/sun/jvm/hotspot/oops/java_lang_Class.java
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File 7086585 Sdiff agent/src/share/classes/sun/jvm/hotspot/oops

agent/src/share/classes/sun/jvm/hotspot/oops/java_lang_Class.java

Print this page




  38 
  39 // initialize fields for java.lang.Class
  40 public class java_lang_Class {
  41 
  42   // java.lang.Class fields
  43   static OopField klassField;
  44   static IntField oopSizeField;
  45 
  46   static {
  47     VM.registerVMInitializedObserver(new Observer() {
  48         public void update(Observable o, Object data) {
  49           initialize(VM.getVM().getTypeDataBase());
  50         }
  51       });
  52   }
  53 
  54   private static synchronized void initialize(TypeDataBase db) {
  55     // klass and oop_size are HotSpot magic fields and hence we can't
  56     // find them from InstanceKlass for java.lang.Class.
  57     Type jlc = db.lookupType("java_lang_Class");
  58     int klassOffset = (int) jlc.getCIntegerField("klass_offset").getValue();
  59     if (VM.getVM().isCompressedOopsEnabled()) {
  60       klassField = new NarrowOopField(new NamedFieldIdentifier("klass"), klassOffset, true);
  61     } else {
  62       klassField = new OopField(new NamedFieldIdentifier("klass"), klassOffset, true);
  63     }
  64     int oopSizeOffset = (int) jlc.getCIntegerField("oop_size_offset").getValue();
  65     oopSizeField = new IntField(new NamedFieldIdentifier("oop_size"), oopSizeOffset, true);
  66   }
  67 
  68   /** get klassOop field at offset hc_klass_offset from a java.lang.Class object */
  69   public static Klass asKlass(Oop aClass) {
  70     return (Klass) java_lang_Class.klassField.getValue(aClass);
  71   }
  72 
  73   /** get oop_size field at offset oop_size_offset from a java.lang.Class object */
  74   public static long getOopSize(Oop aClass) {
  75     return java_lang_Class.oopSizeField.getValue(aClass);
  76   }
  77 }


  38 
  39 // initialize fields for java.lang.Class
  40 public class java_lang_Class {
  41 
  42   // java.lang.Class fields
  43   static OopField klassField;
  44   static IntField oopSizeField;
  45 
  46   static {
  47     VM.registerVMInitializedObserver(new Observer() {
  48         public void update(Observable o, Object data) {
  49           initialize(VM.getVM().getTypeDataBase());
  50         }
  51       });
  52   }
  53 
  54   private static synchronized void initialize(TypeDataBase db) {
  55     // klass and oop_size are HotSpot magic fields and hence we can't
  56     // find them from InstanceKlass for java.lang.Class.
  57     Type jlc = db.lookupType("java_lang_Class");
  58     int klassOffset = (int) jlc.getCIntegerField("_klass_offset").getValue();
  59     if (VM.getVM().isCompressedOopsEnabled()) {
  60       klassField = new NarrowOopField(new NamedFieldIdentifier("klass"), klassOffset, true);
  61     } else {
  62       klassField = new OopField(new NamedFieldIdentifier("klass"), klassOffset, true);
  63     }
  64     int oopSizeOffset = (int) jlc.getCIntegerField("_oop_size_offset").getValue();
  65     oopSizeField = new IntField(new NamedFieldIdentifier("oop_size"), oopSizeOffset, true);
  66   }
  67 
  68   /** get klassOop field at offset hc_klass_offset from a java.lang.Class object */
  69   public static Klass asKlass(Oop aClass) {
  70     return (Klass) java_lang_Class.klassField.getValue(aClass);
  71   }
  72 
  73   /** get oop_size field at offset oop_size_offset from a java.lang.Class object */
  74   public static long getOopSize(Oop aClass) {
  75     return java_lang_Class.oopSizeField.getValue(aClass);
  76   }
  77 }
agent/src/share/classes/sun/jvm/hotspot/oops/java_lang_Class.java
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File