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 代表“及时”。这意味着在虚拟机认为它需要它之前编译东西。因此,根据检查的原子性级别,您可能会发现永远不会运行的代码无论如何都不会被 JIT 编译。

于 2010-09-10T10:29:58.910 回答