Java不安全的内存拷贝

时间:2016-01-10 03:51:34

标签: java memcpy unsafe

Java不安全API是否支持从JVM原始数组到直接内存的memcpy?注意,现有的调用unsafe.copyMemory()从直接内存中的src复制到dst。我对直接内存的写入和阅读感兴趣。

byte src[]=new byte[10];
unsafeRef.copyMemory( src, src_offset, directMemoryOffset, length );

1 个答案:

答案 0 :(得分:3)

TT - 感谢您的回复。它让我进行了实验。内置函数unsafe.copyMemory会将对象从堆上复制到堆外。这是我的示例代码。我只对复制元素感兴趣所以我添加了16作为原始数组偏移。

byte b[]=new byte[N];
long addressOfObject=getAddressOfObject(unsafe, b);
unsafe.copyMemory(b, 16, null, directOffset, N); 

public long getAddressOfObject(sun.misc.Unsafe unsafe, Object obj) {
    Object helperArray[]    = new Object[1];
    helperArray[0]          = obj;
    long baseOffset         = unsafe.arrayBaseOffset(Object[].class);
    long addressOfObject    = unsafe.getLong(helperArray, baseOffset);      
    return addressOfObject;
}