[解決済み】Javaでfinalキーワードを使用するとパフォーマンスが向上しますか?
質問
Javaでは、多くの場所で
final
キーワードを使用することができますが、その使用は一般的ではありません。
例えば
String str = "abc";
System.out.println(str);
上記の場合
str
は
final
が、これは一般的に省かれる。
メソッドが決してオーバーライドされない場合、final キーワードを使用することができます。同様に、継承されることのないクラスの場合もfinalキーワードを使用します。
これらすべてのケースでfinalキーワードを使用すると、本当にパフォーマンスが向上するのでしょうか?もしそうなら、どのように?説明してください。もし
final
Javaプログラマーは、どのような習慣を身につければ、このキーワードを有効に活用できるでしょうか?
どのように解決するのですか?
通常はありません。仮想メソッドの場合、HotSpotはそのメソッドに 実際に がオーバーライドされている場合、インライン化などの最適化を行うことができます。 想定 メソッドをオーバーライドするクラスがロードされるまで、その最適化を元に戻すことができます(または部分的に元に戻す)。
(もちろん、これはHotSpotを使っていると仮定しての話ですが、HotSpotは圧倒的に一般的なJVMですからね...)。
私の考えでは
final
は、パフォーマンス上の理由ではなく、明確な設計と可読性に基づくものです。もしパフォーマンス上の理由で何かを変更したいのであれば、最も明確なコードを変形させる前に適切な測定を行うべきです - そうすれば、達成される追加パフォーマンスが可読性やデザインの悪化に見合うかどうかを判断できます。(私の経験では、その価値があることはほとんどありません。)
編集部:ファイナルフィールドについて言及されていますが、明確なデザインの観点から、ファイナルフィールドはしばしば良いアイデアであることを提起しておく価値があると思います。コンストラクタが完了した後、最終フィールドは他のスレッドですぐに見えるようになることが保証されます。これはおそらく、最も一般的な
final
私の経験では、Josh Blochの「継承のための設計か禁止か」という経験則の支持者として、私はおそらく
final
クラスにはもっと頻繁に...
関連
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] Javaにおけるpublic、protected、package-private、privateの違いは何ですか?
-
[解決済み] JavaでArrayListではなくLinkedListを使用するのはいつですか?
-
[解決済み] SQLiteのINSERT/per-secondのパフォーマンスを向上させる
-
[解決済み] Javaはパラメータのデフォルト値をサポートしていますか?
-
[解決済み] Javaの「for each」ループはどのように機能するのですか?
-
[解決済み] 0.1fを0にすると、なぜ10倍もパフォーマンスが落ちるのですか?
-
[解決済み] Javaの "final "キーワードはどのように機能するのでしょうか?(オブジェクトを修正することは可能です。)
-
[解決済み】Javaではfinallyブロックは必ず実行されるのですか?
-
[解決済み] Intel CPU の _mm_popcnt_u64 で、32 ビットのループカウンターを 64 ビットに置き換えると、パフォーマンスが著しく低下します。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Jdbctemplate の文字列に対するクエリです。EmptyResultDataAccessException: 不正な結果サイズ:期待値1、実際0
-
[解決済み] HashMapのtoString関数はなぜ異なる順序で自分自身を印刷するのですか?
-
[解決済み] この配列の中の数字を入れ替えるには、何が足りないのでしょうか?ジャバ
-
[解決済み] java.util.MissingFormatArgumentException: 形式指定子 '%s' がありません。
-
[解決済み] JavaにおけるMouseListenerとMouseAdapterの違いについて
-
[解決済み] どのように配列の10未満の値(x * 2)を倍増するコードを取得するには?(Java)
-
[解決済み] JavaFX 同じパッケージ内なのに「場所が必要です。
-
[解決済み] x--やx++はここで何をするのですか?
-
[解決済み] Javaの "final "キーワードはどのように機能するのでしょうか?(オブジェクトを修正することは可能です。)
-
[解決済み】finalとeffectly finalの違いについて