10

Object型を入力として受け取るインターフェースを使用しています。プリミティブデータがあり、インターフェイスを介して渡す必要がある場合があるため、これは私にとっては残念なことです。もちろん、これは私を箱に入れさせます。

プロファイリングにより、この領域がコードのホットスポットであることが示されました。したがって、私はこの領域をより速くするための代替案を模索しています。

これについて今日私が考えたのは、静的プリミティブ配列を事前に割り当て、それにプリミティブ値を格納してから、配列を通過させることです(次に、インターフェイスの実装で、配列からdoubleを取得します。

私はこれをテストするためにいくつかのコードを書きました。適度に高い値(1,000万)の場合、配列メソッドの方が大幅に高速であることがわかります。テストの反復回数を増やすと、2つは収束します。

誰かが以前にこのアプローチについて考えたことがあるかどうか、そしてこれをうまくベンチマークする方法について何か提案があるかどうか疑問に思います。

サンプルコード:

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

一部の値に対して最適化されている場合autoboxingでも、1つを割り当てる必要がある回数に対して、これまでに1つのオブジェクト(配列)のみが割り当てられるため、配列オプションを使用します。valueOf()

于 2011-08-02T03:16:08.570 に答える
1

単一要素配列を使用する場合とオートボクシングを使用する場合の主な違いは、配列が変更可能であるということです。これは、良い場合と悪い場合があります。配列を変更可能にすると、同じ配列を再利用して、配列の内容を読み取り、参照を保持しないメソッドに異なる変数を渡しても安全な場合に、パフォーマンスが向上します。ただし、コードがその値を保持する目的で配列の1つへの参照を保持し、他のコードが配列に格納されている値を変更すると、さまざまな見つけにくいバグが発生する可能性があります。

于 2014-02-07T21:05:35.807 に答える