1

Javaでは、次のように条件付きコンパイルを行うことができます

private static final boolean DO_CHECK = false;

...

if (DO_CHECK) {
   // code here
}

コンパイラは、DO_CHECK が常に false であることを確認し、if ステートメント全体を削除します。ただし、特にライブラリコードでは、条件付きコンパイルを使用できない場合がありますが、条件付き JIT コンパイルを使用できるのでしょうか?

 private final boolean doCheck;

 public LibraryClass(boolean d) {
    doCheck = d;
 }


 public void oftenCalledMethod() {
     if (doCheck) {
       ...
     }
 }

doCheck = false で LibraryClass を構築した場合、JIT コンパイラ (Hotspot 内) は if ステートメントも削除しますか?

更新: JIT コンパイルはおそらくインスタンス レベルでは行われないことに気付いたので、これは機能しないと思いますが、静的な方法があるのではないでしょうか?

4

1 に答える 1

0

JITは「ジャストインタイム」の略です。これは、VM が必要と判断する直前にコンパイルされることを意味します。したがって、チェックのアトミシティのレベルによっては、決して実行されないコードが JIT コンパイルされないことに気付くかもしれません。

于 2010-09-10T10:29:58.910 に答える