メンバー変数を直接返すのではなく Collections.unmodifiableList() を返すことを提案しましたが、同僚はパフォーマンスが低下するのではないかと懸念しています。もちろん、最良の答えはそれを測定することであり、私たちはそれを行うかもしれませんが、あなたの経験と、賛否両論の参考文献を知りたい.
3 に答える
いいえ。少なくとも、OpenJDK の実装は変更メソッドを s に文字通り「置き換え」UnsupportedOperationException
、残りは 1 レベルの間接化を追加します。これはコンパイラVM によって最適化されるだけです (それでも、1 レベルの間接化はコストがかからないでしょう)。 )。
変更できないリストを返したい場合、パフォーマンスへの影響は正確さの損失と比較して見劣りします。パフォーマンスだけを理由にそれを避けることはありませんし、それが必要な場合は避けません。
実装を見ると、 Collections.unmodifiable が実際のコレクションの単なる薄いラッパーであり、すべての削除/追加メソッドを転送する代わりに例外をスローすることがわかります。したがって、パフォーマンスに影響はありません (転送呼び出しは JIT によってインライン化されます)。
そうです、ほとんどの場合、元のコレクションではなく、変更不可能なコレクションを絶対に返す必要があります-より良いコーディング方法です。
JIT が関数をインライン化する場合は、いいえ。そうでない場合は、はい、わずかなパフォーマンス ヒットが発生しますが、非常にタイトなループでない限り、それに気付かない可能性があります。
デバッグ用にコンパイルしない限り、関数をインライン化する可能性があります。