在Java中,我们可以做条件编译像这样条件JIT编译
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) {
...
}
}
如果我们用doCheck = false构造LibraryClass,那么JIT编译器(在Hotspot中)是否会移除if语句?
更新:我刚刚意识到JIT编译很可能没有在实例级别完成,所以我认为这不起作用,但也许有一种静态的方式?
有人可能想知道这样做的实际好处是什么 - 如果编译器没有对JIT编译或“优化”这个特定位,系统资源的实际成本是多少? Java程序中的可执行文件大小是否重要?如果存在JIT的一部分方法(如果这是一个正确的术语),内存使用量会增加吗? – fwielstra 2010-09-10 14:33:12