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(长srcAddress,长destAddress,长字节)并直接提供地址(当然,由于对象可能在此期间移动,因此存在风险).

点赞