Java Unsafe.copyMemory java.lang.IllegalArgumentException

我有来自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 (long srcAddress, long destAddress, long bytes)并直接提供地址(当然,由于对象可能在此期间移动,因此存在风险)。