5

次のようなプリミティブキャストを繰り返し行うJavaで記述されたアルゴリズムがあります。

int val = (int) Math.max(val1, val2);

アルゴリズムのパフォーマンスを改善しようとしているので、上記のキャストを繰り返すことを避ける必要があるかどうかを知りたいです。たとえば、次のようなものを使用します。

int val = ((val1>val2) ? val1 : val2);

PS: Stackoverflow を検索しましたが、同様の回答が見つかりませんでした。

4

1 に答える 1

5

議論のために、val1 と val2 が両方とも double であり、int を取得したいとします (これは単なる例であると言っているため)。

まず、通話にかかる時間を比較することをお勧めします

double val = Math.max(val1, val2)

対:

int val = (int) Math.max(val1, val2);

このベンチマークを正しく実行すると (つまり、JVM でワームアップを実行し、何百万回もの呼び出しの時間を測定することを意味します)、ほとんどの場合、キャストの時間が Math.max() と比較してごくわずかであることがわかります。

一般に、パフォーマンスのためにコードを読みにくく複雑にする前に、まずパフォーマンスの向上が現実のものであることを知る必要があります。

于 2013-06-26T08:07:29.077 に答える