Java不安全API是否支持从JVM原始数组到直接内存的memcpy?注意,现有的调用unsafe.copyMemory()从直接内存中的src复制到dst。我对直接内存的写入和阅读感兴趣。
byte src[]=new byte[10];
unsafeRef.copyMemory( src, src_offset, directMemoryOffset, length );
答案 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;
}