JVM:log不打印錯誤堆棧信息,原因及解決

HotSpot VM有個許多人覺得“匪夷所思”的優化,叫做fast throw:有些特定的隱式異常類型(NullPointerException、ArithmeticException( / 0)之類)如果在代碼裏某個特定位置被拋出過多次的話,HotSpot Server Compiler(C2)會透明的決定用fast throw來優化這個拋出異常的地方——直接拋出一個事先分配好的、類型匹配的異常對象。這個對象的message和stack trace都被清空。拋出這個異常的速度是非常快,不但不用額外分配內存,而且也不用爬棧;但反面就是可能正好是需要知道哪裏出問題的時候看不到stack trace了。從Sun JDK5開始要避免C2做這個優化還得額外傳個VM參數:-XX:-OmitStackTraceInFastThrow。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章