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