--- old/src/java.base/share/classes/java/nio/Direct-X-Buffer.java.template 2015-06-27 04:11:58.000000000 +0300 +++ new/src/java.base/share/classes/java/nio/Direct-X-Buffer.java.template 2015-06-27 04:11:58.000000000 +0300 @@ -50,6 +50,7 @@ // Cached array base offset private static final long arrayBaseOffset = (long)unsafe.arrayBaseOffset($type$[].class); + private static final long arrayIndexScale = (long)unsafe.arrayIndexScale($type$[].class); // Cached unaligned-access capability protected static final boolean unaligned = Bits.unaligned(); @@ -278,7 +279,7 @@ else #end[!byte] Bits.copyToArray(ix(pos), dst, arrayBaseOffset, - offset << $LG_BYTES_PER_VALUE$, + offset * arrayIndexScale, length << $LG_BYTES_PER_VALUE$); position(pos + length); } else { @@ -368,7 +369,7 @@ ix(pos), length << $LG_BYTES_PER_VALUE$); else #end[!byte] - Bits.copyFromArray(src, arrayBaseOffset, offset << $LG_BYTES_PER_VALUE$, + Bits.copyFromArray(src, arrayBaseOffset, offset * arrayIndexScale, ix(pos), length << $LG_BYTES_PER_VALUE$); position(pos + length); } else {