簡(jiǎn)書(shū) 占小狼
轉(zhuǎn)載請(qǐng)注明原創(chuàng)出處,謝謝!
很久沒(méi)有寫(xiě)文章了,最近在搗鼓一個(gè)穩(wěn)定性保障組件,代號(hào)Rhino(犀牛),其中包含了熔斷降級(jí)、服務(wù)限流、資源隔離、故障演練和緩存等功能,熔斷降級(jí)類(lèi)似于開(kāi)源的Hystrix,但相比較而言更加的輕量,更加的容易接入,配合管理端可以實(shí)現(xiàn)參數(shù)的可視化實(shí)時(shí)修改
...扯遠(yuǎn)了!
今天分享一個(gè)比較冷門(mén)的JVM參數(shù) OmitStackTraceInFastThrow
這是HotSpot VM專(zhuān)門(mén)針對(duì)異常做的一個(gè)優(yōu)化,稱(chēng)為fast throw,當(dāng)一些異常在代碼里某個(gè)特定位置被拋出很多次的話(huà),HotSpot Server Compiler(C2)會(huì)用fast throw來(lái)優(yōu)化這個(gè)拋出異常的地方,直接拋出一個(gè)事先分配好的、類(lèi)型匹配的對(duì)象,這個(gè)對(duì)象的message和stack trace都被清空。
可以明確:拋出這個(gè)異常非???,不用額外分配內(nèi)存,也不用爬棧。
副作用:正好是需要知道哪里出問(wèn)題的時(shí)候看不到stack trace了,不利于排查問(wèn)題。
如果遇到?jīng)]有stack trace的問(wèn)題,可以考慮通過(guò) -XX:-OmitStackTraceInFastThrow 禁用該默認(rèn)的優(yōu)化