簡體   English   中英

是否有任何Java編譯器或JVM忽略優化語句?

[英]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個
  • 如果沒有,則看到它是一個簡單的getter並將其內聯。 2 3
  • 這減少了對無用字段負載的問題,並將其減少為空檢查。
  • 如果空檢查是更早執行的(例如,由於先前的無用語句:D所致),則空檢查也可以被消除。
  • 否則,如果arrayList是循環不變的,則可以將其移出循環。

為了優化目的,任何Java編譯器或JVM都會忽略此語句嗎?

所以我得出結論,這很有可能發生。


1這可能會在以后加載此類時更改,然后進行取消優化
2假設它值得優化。
3如果方法已經超出內聯限制,則可能會失敗,例如,由於不良的編碼樣式或其他內聯。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM