Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java9+;中,什么替代了不安全的.copyMemory(Object,long,Object,long,long);?_Java_Performance - Fatal编程技术网

在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

但这比原来的方法慢得多。

这一缺陷是故意消除的。没有替代品,也永远不会有替代品。为什么您认为逐字段或按长复制速度较慢?你有基准吗?以这种方式复制的对象的平均大小是多少?