java - 条件 JIT 编译

标签 java compiler-construction jvm jit jvm-hotspot

在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 编译很可能不是在实例级别完成的,所以我认为这行不通,但也许有一种静态方法?

最佳答案

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

关于java - 条件 JIT 编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3683441/

相关文章:

java - 使用 Apache POI 从 Java 将 mysql 数据导出到 excel

JAVA ArrayList类实例成员检查成员是否存在

c++ - 关于对 typedef 的 undefined reference 的 g++ 错误

c - 关于c编译的问题

python - 减少由于 azure databricks 中 GC 分配失败而导致的时间延迟的步骤

java - NewRatio 参数不适用于 CMS 垃圾收集器

java - 将数据从 Activity 实时传递到子 Activity

java - 尝试解密基于 AES 的加密文本时出现 BadPadding 异常

compiler-construction - Tilera 微处理器使用什么指令集?

java - JIT 编译器可以内联 Java 8 默认接口(interface)方法吗?