Java 通过传入单元素基元数组避免装箱

Java 通过传入单元素基元数组避免装箱,java,interface,boxing,autoboxing,unboxing,Java,Interface,Boxing,Autoboxing,Unboxing,我正在使用一个以类型对象作为输入的接口。这对我来说是不幸的,因为我有时需要通过接口传递原始数据。这当然迫使我打拳击 分析表明这个区域是代码中的一个热点。因此,我正在探索使这一领域更快的替代方案 我今天的想法是预先分配一个静态基元数组,并在其中存储基元值,然后通过数组(然后在接口的实现中,从数组中获取double) 我已经编写了一些代码来测试这一点。对于相当高的值(1000万),我发现数组方法要快得多。随着我增加测试的迭代次数,这两种方法会收敛 我想知道以前是否有人考虑过这种方法,以及是否有关于如

我正在使用一个以类型对象作为输入的接口。这对我来说是不幸的,因为我有时需要通过接口传递原始数据。这当然迫使我打拳击

分析表明这个区域是代码中的一个热点。因此,我正在探索使这一领域更快的替代方案

我今天的想法是预先分配一个静态基元数组,并在其中存储基元值,然后通过数组(然后在接口的实现中,从数组中获取double)

我已经编写了一些代码来测试这一点。对于相当高的值(1000万),我发现数组方法要快得多。随着我增加测试的迭代次数,这两种方法会收敛

我想知道以前是否有人考虑过这种方法,以及是否有关于如何很好地对其进行基准测试的建议

示例代码:

Double data = Double.valueOf(VALUE);
inst.interface(data);
//inside interface(Object object)...
Double data = (Double) object;
double d = data.value();

谢谢!
RB

我会选择数组选项,因为只分配了一个对象(数组),而不是在
自动装箱中分配一个对象的次数,即使
valueOf()
针对某些值进行了优化。

使用单元素数组与自动装箱之间的一个主要区别是数组是可变的,在某些情况下可能是好的,在其他情况下可能是坏的。如果可以安全地重用同一数组将不同的变量传递给方法,那么让数组可变将提高性能它们将读取数组的内容,但不保留对数组的任何引用。但是,如果代码保留对其中一个数组的引用以保持其值,而其他一些代码更改数组中存储的值,则可能会导致各种难以发现的错误。

为什么不使用全局
变量呢?我的测试表明,阵列技术的速度快了一个数量级!我怀疑它至少会有竞争力,但这远远超出了我的预期。
doublearray[0] = VALUE;
inst.interface(data);
//inside interface(Object object)...
double[] data = (double[]) object;
double d = data[0];