--- old/agent/src/share/classes/sun/jvm/hotspot/oops/InstanceKlass.java	2008-07-12 17:47:00.000000000 -0700
+++ new/agent/src/share/classes/sun/jvm/hotspot/oops/InstanceKlass.java	2008-07-12 17:47:00.000000000 -0700
@@ -88,7 +88,8 @@
     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());
@@ -141,7 +142,8 @@
   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;
@@ -263,7 +265,8 @@
   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); }
@@ -275,8 +278,9 @@
   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();
   }
 
@@ -455,7 +459,8 @@
       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);
@@ -690,13 +695,6 @@
     }
 
 
-  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
