hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/Array.java
Print this page
rev 611 : Merge
*** 1,7 ****
/*
! * Copyright 2000-2007 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
--- 1,7 ----
/*
! * Copyright 2000-2008 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*** 45,66 ****
super(handle, heap);
}
private static void initialize(TypeDataBase db) throws WrongTypeException {
Type type = db.lookupType("arrayOopDesc");
! length = new CIntField(type.getCIntegerField("_length"), 0);
! headerSize = type.getSize();
}
// Size of the arrayOopDesc
! private static long headerSize;
! // Fields
! private static CIntField length;
// Accessors for declared fields
! public long getLength() { return length.getValue(this); }
public long getObjectSize() {
ArrayKlass klass = (ArrayKlass) getKlass();
// We have to fetch the length of the array, shift (multiply) it
// appropriately, up to wordSize, add the header, and align to
--- 45,100 ----
super(handle, heap);
}
private static void initialize(TypeDataBase db) throws WrongTypeException {
Type type = db.lookupType("arrayOopDesc");
! typeSize = (int)type.getSize();
}
// Size of the arrayOopDesc
! private static long headerSize=0;
! private static long lengthOffsetInBytes=0;
! private static long typeSize;
! private static long headerSizeInBytes() {
! if (headerSize != 0) {
! return headerSize;
! }
! if (VM.getVM().isCompressedOopsEnabled()) {
! headerSize = typeSize;
! } else {
! headerSize = VM.getVM().alignUp(typeSize + VM.getVM().getIntSize(),
! VM.getVM().getHeapWordSize());
! }
! return headerSize;
! }
!
! private static long headerSize(BasicType type) {
! if (Universe.elementTypeShouldBeAligned(type)) {
! return alignObjectSize(headerSizeInBytes())/VM.getVM().getHeapWordSize();
! } else {
! return headerSizeInBytes()/VM.getVM().getHeapWordSize();
! }
! }
!
! private long lengthOffsetInBytes() {
! if (lengthOffsetInBytes != 0) {
! return lengthOffsetInBytes;
! }
! if (VM.getVM().isCompressedOopsEnabled()) {
! lengthOffsetInBytes = typeSize - VM.getVM().getIntSize();
! } else {
! lengthOffsetInBytes = typeSize;
! }
! return lengthOffsetInBytes;
! }
// Accessors for declared fields
! public long getLength() {
! boolean isUnsigned = true;
! return this.getHandle().getCIntegerAt(lengthOffsetInBytes(), VM.getVM().getIntSize(), isUnsigned);
! }
public long getObjectSize() {
ArrayKlass klass = (ArrayKlass) getKlass();
// We have to fetch the length of the array, shift (multiply) it
// appropriately, up to wordSize, add the header, and align to
*** 70,91 ****
s = Oop.alignObjectSize(s);
return s;
}
public static long baseOffsetInBytes(BasicType type) {
! if (Universe.elementTypeShouldBeAligned(type)) {
! return (VM.getVM().isLP64()) ? alignObjectSize(headerSize)
! : VM.getVM().alignUp(headerSize, 8);
! } else {
! return headerSize;
! }
}
public boolean isArray() { return true; }
public void iterateFields(OopVisitor visitor, boolean doVMFields) {
super.iterateFields(visitor, doVMFields);
- if (doVMFields) {
- visitor.doCInt(length, true);
- }
}
}
--- 104,117 ----
s = Oop.alignObjectSize(s);
return s;
}
public static long baseOffsetInBytes(BasicType type) {
! return headerSize(type) * VM.getVM().getHeapWordSize();
}
public boolean isArray() { return true; }
public void iterateFields(OopVisitor visitor, boolean doVMFields) {
super.iterateFields(visitor, doVMFields);
}
}