在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