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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值