なぜローカル変数の数は、Javaバイトコードのメソッドではない最も経済的に使用されていますか?

pf_miles:

私は、単純なJavaコードのスニペットを持っています:

public static void main(String[] args) {
    String testStr = "test";
    String rst = testStr + 1 + "a" + "pig" + 2;
    System.out.println(rst);
}

EclipseのJavaコンパイラでコンパイルし、AsmToolsを使用してバイトコードを調べます。それが示している:

バイトコード

この方法では3つのローカル変数があります。引数は、スロット0であり、スロット1および2はおそらくコードによって使用されます。インデックス0はとにかく引数で、コードが唯一のより多くの変数が必要 - しかし、私は2つのローカル変数だけで十分だと思います。

私の考えが正しいかどうかを確認するために、私は、テキストのバイトコードを編集した2ローカル変数の数を削減し、いくつかの関連の指示を調整します:

編集しました

私はAsmToolsでそれを再コンパイルし、それが正常に動作します!

なぜあるJavacやEclipseのコンパイラは、最小限のローカル変数を使用するには、最適化のこの種をしませんか?

GhostCat敬礼モニカC.:

Javaは、時間コンパイラでちょうどからパフォーマンスを得るというだけの理由。

あなたはJavaのソースで行う、およびクラスファイルに表示しても何のことは実行時のパフォーマンスを可能にするものではありません。もちろん、あなたは一部でなく、ここでしか「愚か」作り避ける意味で無視してはいけません。

意味:この方法は、(!高度に最適化された)マシンコードに翻訳する価値がある場合は、JVMが実行時に決定しました。JVMは「価値がない最適化」、なぜメイクのjavacは、より複雑で、そこにはたくさんの最適化を有することにより、より遅いが決定した場合は?プラス:入力バイトコードよりシンプルでベーシックな、簡単にその入力を分析し、改善するためのJITのためです!

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=228934&siteId=1