訪問'array.length' 的效能成本
問:呼叫'array.length' 的計算成本是否比調用'array.length' 的計算成本更高訪問常規變數?
為了透過將 for 迴圈轉換為 for-each 迴圈來最佳化程式碼,許多開發人員遇到如下構造:
for (int i = 0, n = a.length; i < n; i++) { ... }
其中 a 是陣列。有人質疑,與完全省略n 相比,使用a.length 初始化n 是否會帶來效能損失:
for (int i = 0; i < a.length; i++) { ... }
A:不,呼叫'array.length' 的時間為常數( O(1)) cost.
與集合的size() 方法不同,每次呼叫都會產生效能開銷,存取array.length 相當於讀取局部變數。這是因為 array.length 是陣列類別的公共最終成員,因此存取速度與任何其他變數一樣快。
JIT 編譯器的最佳化
現代即時 (JIT) 編譯器通常透過完全消除對 array.length 的呼叫來最佳化它們。這是因為編譯器可以決定數組的長度在整個循環執行過程中保持不變。
透過程式碼分析確認
array.length 存取的效率可以透過檢查 JVM 的 JIT 編譯器產生的本機程式碼來驗證。在大多數情況下,對 array.length 的呼叫將會被最佳化。
規則的例外
在某些情況下,JIT 編譯器可能無法最佳化array.length 存取:
以上是## 訪問'array.length”真的是效能瓶頸嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!