< prev index next >

src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/oops/Array.java

Print this page
*** 59,35 ***
  
    private static long headerSizeInBytes() {
      if (headerSize != 0) {
        return headerSize;
      }
!     if (VM.getVM().isCompressedKlassPointersEnabled()) {
!       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().isCompressedKlassPointersEnabled()) {
!       lengthOffsetInBytes = typeSize - VM.getVM().getIntSize();
      } else {
!       lengthOffsetInBytes = typeSize;
      }
      return lengthOffsetInBytes;
    }
  
    // Accessors for declared fields
--- 59,43 ---
  
    private static long headerSizeInBytes() {
      if (headerSize != 0) {
        return headerSize;
      }
!     if (VM.getVM().isCompactObjectHeadersEnabled()) {
!       headerSize = lengthOffsetInBytes() + VM.getVM().getIntSize();
      } else {
!       if (VM.getVM().isCompressedKlassPointersEnabled()) {
!         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 static long lengthOffsetInBytes() {
      if (lengthOffsetInBytes != 0) {
        return lengthOffsetInBytes;
      }
!     if (VM.getVM().isCompactObjectHeadersEnabled()) {
!       lengthOffsetInBytes = Oop.getHeaderSize();
      } else {
!       if (VM.getVM().isCompressedKlassPointersEnabled()) {
+         lengthOffsetInBytes = typeSize - VM.getVM().getIntSize();
+       } else {
+         lengthOffsetInBytes = typeSize;
+       }
      }
      return lengthOffsetInBytes;
    }
  
    // Accessors for declared fields

*** 106,11 ***
      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) {
--- 114,21 ---
      s = Oop.alignObjectSize(s);
      return s;
    }
  
    public static long baseOffsetInBytes(BasicType type) {
!     if (VM.getVM().isCompactObjectHeadersEnabled()) {
+       long typeSizeInBytes = headerSizeInBytes();
+       if (Universe.elementTypeShouldBeAligned(type)) {
+         VM vm = VM.getVM();
+         return vm.alignUp(typeSizeInBytes, vm.getVM().getHeapWordSize());
+       } else {
+         return typeSizeInBytes;
+       }
+     } else {
+       return headerSize(type) * VM.getVM().getHeapWordSize();
+     }
    }
  
    public boolean isArray()             { return true; }
  
    public void iterateFields(OopVisitor visitor, boolean doVMFields) {
< prev index next >