10

我正在使用一个将 Object 类型作为其输入的接口。这对我来说很不幸,因为我有时需要通过接口传递原始数据。这当然迫使我装箱。

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

我今天对此的一个想法是预先分配一个静态原始数组,并将原始值存储在其中,然后传递数组(然后在接口的实现中,从数组中获取双精度值。

我写了一些代码来测试这个。对于相当高的值(1000 万),我看到数组方法明显更快。随着我增加测试的迭代次数,两者会收敛。

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

示例代码:

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

对...

doublearray[0] = VALUE;
inst.interface(data);
//inside interface(Object object)...
double[] data = (double[]) object;
double d = data[0];

谢谢!RB

4

2 回答 2

1

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

于 2014-02-07T21:05:35.807 回答
1

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

于 2011-08-02T03:16:08.570 回答