2011-08-02 68 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

使用單元素數組與自動裝箱之間的一個主要區別是該數組將是可變的,這在某些情況下可能是好的,在其他情況下可能是不好的。如果可以安全地重複使用相同的數組將不同的變量傳遞給將要讀取數組內容但不保存任何引用的方法,讓數組可變可以提高性能。但是,如果代碼爲了保持其值而引用其中一個數組,並且其他代碼更改了存儲在數組中的值,它可能會導致各種難以發現的錯誤。

相關問題