我有来自Unsafe的copyMemory的问题.
我花了2天时间解决它但没有结果.
下面给出的代码总是以“IllegalArgumentException”结尾.
你能帮助我并说明问题在哪里吗?
public void testMemoryCopy() {
class A {
public long val = 10;
}
A a0 = new A();
A a1 = new A();
try {
long offset = unsafe.objectFieldOffset(A.class.getField("val"));
unsafe.copyMemory(a0, offset, a1, offset, 8);
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
}
}
最佳答案 不幸的是,这个版本的Unsafe.copyMemory仅用于复制到offheap内存区域(通过提供null作为目标,绝对内存地址而不是offsett)或复制到基本数组.
当尝试指定除null或primitve数组之外的任何其他内容作为第三个参数时,您将获得java.lang.IllegalArgumentException.
或者,您可以使用Unsafe.copyMemory(长srcAddress,长destAddress,长字节)并直接提供地址(当然,由于对象可能在此期间移动,因此存在风险).