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

Print this page
rev 146 : [mq]: mixa.layout.patch

@@ -86,11 +86,12 @@
     sourceDebugExtension = new OopField(type.getOopField("_source_debug_extension"), Oop.getHeaderSize());
     innerClasses         = new OopField(type.getOopField("_inner_classes"), Oop.getHeaderSize());
     nonstaticFieldSize   = new CIntField(type.getCIntegerField("_nonstatic_field_size"), Oop.getHeaderSize());
     staticFieldSize      = new CIntField(type.getCIntegerField("_static_field_size"), Oop.getHeaderSize());
     staticOopFieldSize   = new CIntField(type.getCIntegerField("_static_oop_field_size"), Oop.getHeaderSize());
-    nonstaticOopMapSize  = new CIntField(type.getCIntegerField("_nonstatic_oop_map_size"), Oop.getHeaderSize());
+    mapOffsetInBytes     = new CIntField(type.getCIntegerField("_map_offset_in_bytes"), Oop.getHeaderSize());
+    objectSize           = new CIntField(type.getCIntegerField("_object_size"), Oop.getHeaderSize());
     isMarkedDependent    = new CIntField(type.getCIntegerField("_is_marked_dependent"), Oop.getHeaderSize());
     initState            = new CIntField(type.getCIntegerField("_init_state"), Oop.getHeaderSize());
     vtableLen            = new CIntField(type.getCIntegerField("_vtable_len"), Oop.getHeaderSize());
     itableLen            = new CIntField(type.getCIntegerField("_itable_len"), Oop.getHeaderSize());
     breakpoints          = type.getAddressField("_breakpoints");

@@ -139,11 +140,12 @@
   private static OopField  sourceDebugExtension;
   private static OopField  innerClasses;
   private static CIntField nonstaticFieldSize;
   private static CIntField staticFieldSize;
   private static CIntField staticOopFieldSize;
-  private static CIntField nonstaticOopMapSize;
+  private static CIntField mapOffsetInBytes;
+  private static CIntField objectSize;
   private static CIntField isMarkedDependent;
   private static CIntField initState;
   private static CIntField vtableLen;
   private static CIntField itableLen;
   private static AddressField breakpoints;

@@ -261,11 +263,12 @@
   public Symbol    getSourceDebugExtension(){ return (Symbol)       sourceDebugExtension.getValue(this); }
   public TypeArray getInnerClasses()        { return (TypeArray)    innerClasses.getValue(this); }
   public long      getNonstaticFieldSize()  { return                nonstaticFieldSize.getValue(this); }
   public long      getStaticFieldSize()     { return                staticFieldSize.getValue(this); }
   public long      getStaticOopFieldSize()  { return                staticOopFieldSize.getValue(this); }
-  public long      getNonstaticOopMapSize() { return                nonstaticOopMapSize.getValue(this); }
+  public long      getMapOffsetInBytes()    { return                mapOffsetInBytes.getValue(this); }
+  public long      objectSize()             { return                objectSize.getValue(this); }
   public boolean   getIsMarkedDependent()   { return                isMarkedDependent.getValue(this) != 0; }
   public long      getVtableLen()           { return                vtableLen.getValue(this); }
   public long      getItableLen()           { return                itableLen.getValue(this); }
   public Symbol    getGenericSignature()    { return (Symbol)       genericSignature.getValue(this); }
   public long      majorVersion()           { return                majorVersion.getValue(this); }

@@ -273,12 +276,13 @@
 
   // "size helper" == instance size in words
   public long getSizeHelper() {
     int lh = getLayoutHelper();
     if (Assert.ASSERTS_ENABLED) {
-      Assert.that(lh > 0, "layout helper initialized for instance class");
+      Assert.that(isFixedInstance(), "layout helper initialized for instance class");
     }
+    lh = Bits.maskBits(lh, ~Bits.rightNBits(LH_SIZE_LOW_BITS));
     return lh / VM.getVM().getAddressSize();
   }
 
   // same as enum InnerClassAttributeOffset in VM code.
   public static interface InnerClassAttributeOffset {

@@ -453,11 +457,12 @@
       visitor.doOop(sourceFileName, true);
       visitor.doOop(innerClasses, true);
       visitor.doCInt(nonstaticFieldSize, true);
       visitor.doCInt(staticFieldSize, true);
       visitor.doCInt(staticOopFieldSize, true);
-      visitor.doCInt(nonstaticOopMapSize, true);
+      visitor.doCInt(mapOffsetInBytes, true);
+      visitor.doCInt(objectSize, true);
       visitor.doCInt(isMarkedDependent, true);
       visitor.doCInt(initState, true);
       visitor.doCInt(vtableLen, true);
       visitor.doCInt(itableLen, true);
     }

@@ -688,17 +693,10 @@
 
         return directImplementedInterfaces;
     }
 
 
-  public long getObjectSize() {
-    long bodySize =    alignObjectOffset(getVtableLen() * getHeap().getOopSize())
-                     + alignObjectOffset(getItableLen() * getHeap().getOopSize())
-                     + (getStaticFieldSize() + getNonstaticOopMapSize()) * getHeap().getOopSize();
-    return alignObjectSize(headerSize + bodySize);
-  }
-
   public Klass arrayKlassImpl(boolean orNull, int n) {
     // FIXME: in reflective system this would need to change to
     // actually allocate
     if (getArrayKlasses() == null) { return null; }
     ObjArrayKlass oak = (ObjArrayKlass) getArrayKlasses();