ArrayBlockingQueue:用於效能最佳化的局部Final 變數
在ArrayBlockingQueue 類別中,值得注意的是,某些方法會在之前,某些方法會在之前將成員欄位複製到局部Final 變數呼叫關鍵操作。
例如,在 Offer() 中方法:
public boolean offer(E e) { ... final ReentrantLock lock = this.lock; lock.lock(); ... }
這裡將this.lock複製到局部變數lock。這種做法也擴展到其他成員字段,例如 extract() 方法中的 E[] 項。
鑑於成員字段已被聲明為最終成員字段,人們可能會質疑這些本地副本的必要性。然而,有一個微妙的性能優化在起作用。
根據該類別的作者 Doug Lea 的說法,複製到局部變數會產生較小的字節碼。對於低階程式碼,此最佳化可以稍微減少與檢索和使用成員欄位相關的開銷,特別是對於頻繁呼叫的方法。
正如 core-libs-dev 郵件列表線程中所述,此最佳化「產生最小的字節碼,並且編寫更接近機器的程式碼是很好的。」
以上是為什麼ArrayBlockingQueue使用局部final變數來進行效能最佳化?的詳細內容。更多資訊請關注PHP中文網其他相關文章!