Java バイトコード コンパイラは通常、最適化の方法をほとんど行わないため、final を使用してもバイトコードの効率が大幅に向上または低下することはありません。効率ボーナス (ある場合) は、JIT コンパイラーによって生成されるネイティブ コードにあります。
理論的には、final を使用すると、最適化に役立つヒントが JIT コンパイラに提供されます。実際には、最近の HotSpot JIT コンパイラーは、ヒントを無視することでより良い仕事をすることができます。たとえば、最新の JIT コンパイラは通常、グローバル分析を実行して、特定のメソッド呼び出しが、アプリケーションの現在ロードされているクラスのコンテキストでリーフ メソッドへの呼び出しであるかどうかを調べます。この分析は、最終的なヒントよりも正確であり、ランタイムは、分析を無効にする新しいクラスが読み込まれたことを検出することさえできます...そして、影響を受けるコードの分析とネイティブ コード生成をやり直します。
したがって、ベスト プラクティスは、final を使用して (大まかに言えば) デザインの意図を表現し、必要なその他のセマンティック効果を実現することです。(たとえば、 final 修飾子を使用すると、スレッドセーフな不変型を実装する際に重要な役割を果たすことができます。) final を最適化のヒントとして使用すると、多くのことは達成できず、コードの変更と拡張が難しくなります。
フォント:リンク