Java 8 中Lambda 表達式的效能影響
在Java 8 中使用流API 迭代集合時,引入了新的語法糖拉姆達表達式。然而,問題出現了:「這是否會導致每次迭代在堆上創建一個匿名 Consumer 物件?」
Lambda 每次都會在堆上創建一個新物件嗎?
答案是“不”,但事情不那麼簡單。如果 lambda 表達式不捕獲任何值,它本質上會成為每次呼叫重用的單例。
JVM 實作詳細資訊
Java 虛擬機器 (JVM)在實作 lambda 表達式方面具有彈性。 Oracle 的 JVM 目前為每個 lambda 表達式至少建立一個實例,但為不捕獲值的表達式建立單例。
性能影響
此行為對內存有性能影響消耗和執行時間:
何時使用舊樣式Loop
通常建議使用lambda表達式來迭代集合,因為它們提供簡潔且可讀的程式碼。對於非常大的多層資料結構,效能至關重要,您可以考慮使用傳統的 for 迴圈。但是,除非資料結構確實非常龐大,否則效能差異可能很小。
Java 語言規範
The Java 中介紹了lambda 表達式的行為® 語言規範,「15.27.4. Lambda 表達式的運行時計算」一章。它允許實現靈活性,允許 JVM 優化記憶體使用和執行時間。
以上是Java 8 Lambda 表達式是否為每次迭代建立一個新物件?的詳細內容。更多資訊請關注PHP中文網其他相關文章!