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