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();