確定遞歸深度
要測量遞歸的最大深度,通常需要計算當前堆疊深度和遞歸等級可以在觸發 StackOverflowError 之前執行。
計算堆疊深度
levelsDeep() 方法旨在透過產生和捕獲異常並檢查來確定當前堆疊深度產生的堆疊追蹤。然而,其最大深度為 1024 的限制帶來了障礙。
計算遞歸層級
stackLeft() 方法嘗試透過遞歸來計算剩餘的堆疊深度呼叫自身直到發生 StackOverflowError。這似乎是一種可靠的方法。
Java 8 中的非確定性堆疊深度
意外地,在某些版本的Java(例如Oracle Java)中使用stackLeft() 8) 產生不確定的結果。最大遞歸深度大約在 18,500 到 20,700 之間變化。在深度保持一致的 OpenJDK 7 中沒有觀察到這種行為。
非確定性的原因
這種非確定性行為源自於Java 熱點之間的交互優化器和各種因素,例如:
因此,Java 8 上的最大遞歸深度可能會根據這些因素的組合而變化,使得它是不確定的。
以上是Java 8 的 JIT 最佳化如何影響最大遞歸深度?的詳細內容。更多資訊請關注PHP中文網其他相關文章!