Условная JIT-компиляция - PullRequest
1 голос
/ 10 сентября 2010

В Java мы можем сделать условную компиляцию следующим образом:

private static final boolean DO_CHECK = false;

...

if (DO_CHECK) {
   // code here
}

Компилятор увидит, что DO_CHECK всегда ложно, и удалит весь оператор if. Однако иногда, особенно в библиотечном коде, мы не можем использовать условную компиляцию, но мне интересно, можем ли мы использовать условную JIT-компиляцию?

 private final boolean doCheck;

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


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

Если мы создадим LibraryClass с doCheck = false, JIT-компилятор (в Hotspot) также удалит оператор if?

Обновление: я только что понял, что JIT-компиляция, скорее всего, не выполняется на уровне экземпляра, поэтому я думаю, что это не сработает, но, возможно, есть статический способ?

1 Ответ

0 голосов
/ 10 сентября 2010

JIT означает «как раз вовремя». Это означает, что материал компилируется непосредственно перед тем, как виртуальная машина думает, что это нужно. Поэтому, в зависимости от уровня атомарности проверки, вы можете обнаружить, что код, который никогда не запускается, никогда не компилируется JIT.

...