[解決済み] java メソッドコールはどれだけ高価か
質問
私は初心者なのですが、コードを繰り返すのは良くないといつも読んでいます。しかし、そうしないためには、通常、余分なメソッド呼び出しを持っていなければならないようです。例えば、次のようなクラスがあるとします。
public class BinarySearchTree<E extends Comparable<E>>{
private BinaryTree<E> root;
private final BinaryTree<E> EMPTY = new BinaryTree<E>();
private int count;
private Comparator<E> ordering;
public BinarySearchTree(Comparator<E> order){
ordering = order;
clear();
}
public void clear(){
root = EMPTY;
count = 0;
}
}
実際のメソッドを呼び出すのではなく、clear()メソッドの2行をコピーしてコンストラクタに貼り付ける方が最適でしょうか?もしそうなら、どれくらいの違いがあるのでしょうか? コンストラクタが 10 回のメソッド呼び出しを行い、それぞれがインスタンス変数に値を設定するだけだとしたらどうでしょうか? 最良のプログラミング方法は何ですか?
どのように解決するのですか?
<ブロッククオート実際のメソッドを呼び出すのではなく、clear() メソッドの 2 行をコピーしてコンストラクタに貼り付ける方が最適でしょうか?
コンパイラーはその最適化を実行することができます。そして、JVMもそうすることができます。コンパイラの作者とJVMの作者によって使用される用語は、"inline expansion"です。
もしそうなら、どれくらいの違いがあるのでしょうか?
測ってみてください。多くの場合、違いがないことがわかるでしょう。また、これがパフォーマンスのホットスポットであると信じるなら、あなたは間違った場所を探していることになり、それが測定する必要がある理由です。
コンストラクタが 10 回のメソッド呼び出しを行い、それぞれがインスタンス変数に値を設定するだけだとしたらどうでしょうか。
繰り返しますが、それは生成されたバイトコードとJava仮想マシンによって実行された任意の実行時最適化に依存します。コンパイラー/JVM がメソッド呼び出しをインライン化できる場合、実行時に新しいスタック フレームを作成するオーバーヘッドを回避するための最適化が実行されます。
ベストなプログラミングプラクティスは何ですか?
早すぎる最適化を避けること。ベストプラクティスは、読みやすく設計されたコードを書き、アプリケーションの性能のホットスポットに対して最適化することです。
関連
-
undefined[sonar] sonar:デフォルトのスキャンルール
-
コンストラクタDate()が未定義である問題
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] JavaでNullPointerExceptionを回避する方法
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] Java Mapの各エントリを効率的に反復処理するには?
-
[解決済み] Javaでメモリーリークを発生させるにはどうしたらいいですか?
-
[解決済み] JavaでStringをintに変換するにはどうしたらいいですか?
-
[解決済み] callとapplyの違いは何ですか?
-
[解決済み] Java で、あるコンストラクタを別のコンストラクタから呼び出すにはどうすればよいですか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
スレッド "main "での例外 java.util.NoSuchElementException in Java 問題解決済み
-
undefined[sonar] sonar:デフォルトのスキャンルール
-
Eclipse の問題 アクセス制限。タイプ 'jfxrt' はAPI解決されていません。
-
ブートレイヤーの初期化中にエラーが発生しました java.lang.module.FindException: モジュールが見つかりません
-
無効なメソッド宣言
-
java -jarコマンドでパッケージを実行すると、無効または破損したjarfile xxxx.jarが表示される。
-
シェルコマンドやスクリプトのJavaコール
-
eclipse にリソースリーク:'in' が閉じない
-
Java:未解決コンパイル問題の解決方法
-
CAS 5.1.8でhttpをサポートし、認証されていない認可サービスエラーのプロンプトが表示される問題を解決した。