[英]Does any Java compiler or JVM ignore a statement for optimization?
假設我們有以下語句
arrayList.size();
該語句本身不執行任何操作。 為了優化目的,任何Java編譯器或JVM都會忽略此語句嗎?
實際上,編譯器或JVM假定該語句沒有副作用,因此將其刪除以進行優化。
如評論中所述,這並非完全禁止操作:至少,它必須執行null檢查。 此外,可能存在ArrayList
子類以不同的方式工作。 從理論上講,他們甚至可以從數據庫等獲取數據。 通常,沒有人會這樣做來ArrayList
,但是這樣的List
實現是有道理的。
編譯器(JIT,不是Javac)必須能夠證明它確實沒有副作用。 通常,它很簡單
ArrayList.size()
任何重寫的實現。 1個 arrayList
是循環不變的,則可以將其移出循環。 為了優化目的,任何Java編譯器或JVM都會忽略此語句嗎?
所以我得出結論,這很有可能發生。
1這可能會在以后加載此類時更改,然后進行取消優化 。
2假設它值得優化。
3如果方法已經超出內聯限制,則可能會失敗,例如,由於不良的編碼樣式或其他內聯。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.