在某些情況下,Java 程式碼捕捉NullPointerException 但無法記錄StackTrace,讓開發人員感到困惑,因為「顯示java.lang.NullPointerException」。
這個令人困惑的問題讓開發者在線上尋找解決方案無果。然而,經過進一步調查,發現根本原因在於 HotSpot JVM 的最佳化策略。
為了抵消這種最佳化並恢復 StackTrace 檢索,開發人員必須將以下參數傳遞給 JVM:
-XX:-OmitStackTraceInFastThrow
這種最佳化源自於 JVM 對重複異常的處理,例如 NullPointerExceptions。首次發生時,JVM 會記錄完整的 StackTrace。然而,在頻繁發生的情況下,出於效能原因和避免過多的日誌條目,JVM 會抑制 StackTrace 日誌記錄。
此實作的詳細說明可以在 HotSpot JVM 原始碼中找到,特別是在「graphKit.h」檔案中。 cpp」檔案。透過調整 OmitStackTraceInFastThrow 變量,開發人員可以重新獲得堆疊追蹤可見性並促進調試過程。
以上是為什麼 Java NullPointerException 缺少 StackTrace?的詳細內容。更多資訊請關注PHP中文網其他相關文章!