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