2011-08-02 33 views
9

我正在使用一个接口,该接口将Object类型作为其输入。这对我来说很不幸,因为我有时需要通过界面传递原始数据。这当然会迫使我去装箱。通过传入单元素原始数组来避免拳击

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

我今天想到的一个想法是预先分配一个静态基本数组,并将原始值存储在这个数组中,然后传递数组(然后在接口的实现中, array。

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

我想知道是否有人曾经想过这种方法,如果有任何关于如何基准这个好的建议

示例代码:

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

VS ...

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

谢谢! RB

+0

为什么没有一个全局的'double'变量呢? – irreputable

回答

1

我会去的阵列选项,因为只有一个对象是有史以来分配(阵列),与次数,你就必须分配一个在autoboxing,即使valueOf()是对于一些价值优化。

+0

我的测试显示阵列技术快一个数量级!我怀疑它至少有竞争力,但这比我预期的要多得多。 – user321605

1

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

相关问题