在Java9+;中,什么替代了不安全的.copyMemory(Object,long,Object,long,long);?
在Java9+;中,什么替代了不安全的.copyMemory(Object,long,Object,long,long);?,java,performance,Java,Performance,不安全。copyMemory(Object,long,Object,long,long)能够将对象快速复制到一个地址是非常有价值的 不幸的是,自Java9以来,只有基元数组似乎对第一个参数有效。尝试使用其他对象类型时会出现异常: Exception in thread "main" java.lang.IllegalArgumentException at java.base/jdk.internal.misc.Unsafe.invalidInput(Unsafe.j
不安全。copyMemory(Object,long,Object,long,long)
能够将对象快速复制到一个地址是非常有价值的
不幸的是,自Java9以来,只有基元数组似乎对第一个参数有效。尝试使用其他对象类型时会出现异常:
Exception in thread "main" java.lang.IllegalArgumentException
at java.base/jdk.internal.misc.Unsafe.invalidInput(Unsafe.java:440)
at java.base/jdk.internal.misc.Unsafe.checkPrimitiveArray(Unsafe.java:560)
at java.base/jdk.internal.misc.Unsafe.checkPrimitivePointer(Unsafe.java:579)
at java.base/jdk.internal.misc.Unsafe.copyMemoryChecks(Unsafe.java:832)
at java.base/jdk.internal.misc.Unsafe.copyMemory(Unsafe.java:800)
at jdk.unsupported/sun.misc.Unsafe.copyMemory(Unsafe.java:573)
以这种方式在Java 9+中使用此方法的替代方法是什么(如果可能,性能类似)
我正在考虑使用Unsafe.getLong(Object,long offset)
读取对象的值,Unsafe.putLong(Object,long offset,long value)
,即:
void复制(长dest、对象src、长srcSize){
长偏移量=0L;
while(destcoffset
但这比原来的方法慢得多。这一缺陷是故意消除的。没有替代品,也永远不会有替代品。为什么您认为逐字段或按长复制速度较慢?你有基准吗?以这种方式复制的对象的平均大小是多少?