This class may be removed in the future. Consider the replacements in JEP 193 'Variable Handles': http://openjdk.java.net/jeps/193
private static void copyMemory(Object src, long srcAddress, Object dest, long destAddress, int length) { // The Unsafe Javadoc specifies that the transfer size is 8 iff length % 8 == 0 // so ensure that we copy big chunks whenever possible, even at the expense of two separate copy operations int bytesToCopy = length - (length % 8); unsafe.copyMemory(src, srcAddress, dest, destAddress, bytesToCopy); unsafe.copyMemory(src, srcAddress + bytesToCopy, dest, destAddress + bytesToCopy, length - bytesToCopy); }
@Override public byte[] toBytes(long startIndex, int len) { byte res[] = new byte[len]; unsafe.copyMemory(null,baseAdress+startIndex, res, FSTUtil.bufoff, len ); return res; }
@Override public void setDouble(long byteIndex, double[] source, int elemoff, int numElems) { unsafe.copyMemory(source,daoff+elemoff*8,null, baseAdress +byteIndex,numElems*8); }
@Override public void setChar(long byteIndex, char[] source, int elemoff, int numElems) { unsafe.copyMemory(source,caoff+elemoff*2, null, baseAdress +byteIndex,numElems*2); }
private static void copyMemoryWithSafePointPolling( Object src, long srcOffset, Object dst, long dstOffset, long length) { while (length > 0) { long size = Math.min(length, UNSAFE_COPY_THRESHOLD); UNSAFE.copyMemory(src, srcOffset, dst, dstOffset, size); length -= size; srcOffset += size; dstOffset += size; } }
private static void copyMemoryWithSafePointPolling(long srcAddr, long dstAddr, long length) { while (length > 0) { long size = Math.min(length, UNSAFE_COPY_THRESHOLD); UNSAFE.copyMemory(srcAddr, dstAddr, size); length -= size; srcAddr += size; dstAddr += size; } }
private static void copyMemoryWithSafePointPolling( Object src, long srcOffset, Object dst, long dstOffset, long length) { while (length > 0) { long size = Math.min(length, UNSAFE_COPY_THRESHOLD); UNSAFE.copyMemory(src, srcOffset, dst, dstOffset, size); length -= size; srcOffset += size; dstOffset += size; } }
private static void copyMemoryWithSafePointPolling(long srcAddr, long dstAddr, long length) { while (length > 0) { long size = Math.min(length, UNSAFE_COPY_THRESHOLD); UNSAFE.copyMemory(srcAddr, dstAddr, size); length -= size; srcAddr += size; dstAddr += size; } }
@Override public void setFloat(long byteIndex, float[] source, int elemoff, int numElems) { checkIndex(byteIndex,numElems*4); unsafe.copyMemory(source,faoff+off-byteoff+elemoff*4,base,off+byteIndex,numElems*4); }
@Override public void setDouble(long byteIndex, double[] source, int elemoff, int numElems) { checkIndex(byteIndex,numElems*8); unsafe.copyMemory(source,daoff+off-byteoff+elemoff*8,base,off+byteIndex,numElems*8); }
@Override public void setLong(long byteIndex, long[] source, int elemoff, int numElems) { checkIndex(byteIndex,numElems*8); unsafe.copyMemory(source,laoff+off-byteoff+elemoff*8,base,off+byteIndex,numElems*8); }
@Override public void setInt(long byteIndex, int[] source, int elemoff, int numElems) { checkIndex(byteIndex,numElems*4); unsafe.copyMemory(source,iaoff+off-byteoff+elemoff*4,base,off+byteIndex,numElems*4); }
@Override public void setChar(long byteIndex, char[] source, int elemoff, int numElems) { checkIndex(byteIndex,numElems*2); unsafe.copyMemory(source,caoff+off-byteoff+elemoff*2,base,off+byteIndex,numElems*2); }
@Override public void set(long byteIndex, byte[] source, int elemoff, int numElems) { checkIndex(byteIndex,numElems); unsafe.copyMemory(source,off+elemoff,base,off+byteIndex,numElems); }
@Override public void setShort(long byteIndex, short[] source, int elemoff, int numElems) { checkIndex(byteIndex,numElems*2); unsafe.copyMemory(source,caoff+off-byteoff+elemoff*2,base,off+byteIndex,numElems*2); }
static void copyMemory(Object src, long srcOffset, Object dst, long dstOffset, long length) { // Manual safe-point polling is only needed prior Java9: // See https://bugs.openjdk.java.net/browse/JDK-8149596 if (javaVersion() <= 8) { copyMemoryWithSafePointPolling(src, srcOffset, dst, dstOffset, length); } else { UNSAFE.copyMemory(src, srcOffset, dst, dstOffset, length); } }
static void copyMemory(long srcAddr, long dstAddr, long length) { // Manual safe-point polling is only needed prior Java9: // See https://bugs.openjdk.java.net/browse/JDK-8149596 if (javaVersion() <= 8) { copyMemoryWithSafePointPolling(srcAddr, dstAddr, length); } else { UNSAFE.copyMemory(srcAddr, dstAddr, length); } }
static void copyMemory(long srcAddr, long dstAddr, long length) { // Manual safe-point polling is only needed prior Java9: // See https://bugs.openjdk.java.net/browse/JDK-8149596 if (javaVersion() <= 8) { copyMemoryWithSafePointPolling(srcAddr, dstAddr, length); } else { UNSAFE.copyMemory(srcAddr, dstAddr, length); } }
static void copyMemory(Object src, long srcOffset, Object dst, long dstOffset, long length) { // Manual safe-point polling is only needed prior Java9: // See https://bugs.openjdk.java.net/browse/JDK-8149596 if (javaVersion() <= 8) { copyMemoryWithSafePointPolling(src, srcOffset, dst, dstOffset, length); } else { UNSAFE.copyMemory(src, srcOffset, dst, dstOffset, length); } }
@Override public void copyTo(BasicBytez other, long otherByteIndex, long myByteIndex, long lenBytes) { if ( other instanceof HeapBytez) { HeapBytez hp = (HeapBytez) other; unsafe.copyMemory(null,baseAdress+myByteIndex, hp.getBase(), hp.getOff()+otherByteIndex,lenBytes); } else { for ( long i = 0; i < lenBytes; i++ ) { other.put(otherByteIndex+i,get(myByteIndex+i)); } } }