JVM引數分享 OmitStackTraceInFastThrow

weixin_34320159發表於2017-09-28

簡書 佔小狼
轉載請註明原創出處,謝謝!

很久沒有寫文章了,最近在搗鼓一個穩定性保障元件,代號Rhino(犀牛),其中包含了熔斷降級、服務限流、資源隔離、故障演練和快取等功能,熔斷降級類似於開源的Hystrix,但相比較而言更加的輕量,更加的容易接入,配合管理端可以實現引數的視覺化實時修改

...扯遠了!

今天分享一個比較冷門的JVM引數 OmitStackTraceInFastThrow

這是HotSpot VM專門針對異常做的一個優化,稱為fast throw,當一些異常在程式碼裡某個特定位置被丟擲很多次的話,HotSpot Server Compiler(C2)會用fast throw來優化這個丟擲異常的地方,直接丟擲一個事先分配好的、型別匹配的物件,這個物件的message和stack trace都被清空。

可以明確:丟擲這個異常非常快,不用額外分配記憶體,也不用爬棧。

副作用:正好是需要知道哪裡出問題的時候看不到stack trace了,不利於排查問題。

如果遇到沒有stack trace的問題,可以考慮通過 -XX:-OmitStackTraceInFastThrow 禁用該預設的優化

相關文章