24

メンバー変数を直接返すのではなく Collections.unmodifiableList() を返すことを提案しましたが、同僚はパフォーマンスが低下するのではないかと懸念しています。もちろん、最良の答えはそれを測定することであり、私たちはそれを行うかもしれませんが、あなたの経験と、賛否両論の参考文献を知りたい.

4

3 に答える 3

26

いいえ。少なくとも、OpenJDK の実装は変更メソッドを s に文字通り「置き換え」UnsupportedOperationException、残りは 1 レベルの間接化を追加します。これはコンパイラVM によって最適化されるだけです (それでも、1 レベルの間接化はコストがかからないでしょう)。 )。

変更できないリストを返したい場合、パフォーマンスへの影響は正確さの損失と比較して見劣りします。パフォーマンスだけを理由にそれを避けることはありませんし、それが必要な場合は避けません。

于 2011-07-07T00:24:49.300 に答える
7

実装を見ると、 Collections.unmodifiable が実際のコレクションの単なる薄いラッパーであり、すべての削除/追加メソッドを転送する代わりに例外をスローすることがわかります。したがって、パフォーマンスに影響はありません (転送呼び出しは JIT によってインライン化されます)。

そうです、ほとんどの場合、元のコレクションではなく、変更不可能なコレクションを絶対に返す必要があります-より良いコーディング方法です。

于 2011-07-07T00:24:38.657 に答える
3

JIT が関数をインライン化する場合は、いいえ。そうでない場合は、はい、わずかなパフォーマンス ヒットが発生しますが、非常にタイトなループでない限り、それに気付かない可能性があります。

デバッグ用にコンパイルしない限り、関数をインライン化する可能性があります。

于 2011-07-07T00:26:29.750 に答える