Java中try-catch對(duì)性能是否有影響
當(dāng)前位置:點(diǎn)晴教程→知識(shí)管理交流
→『 技術(shù)文檔交流 』
在我們平時(shí)寫代碼的時(shí)候經(jīng)常會(huì)使用try-catch語(yǔ)句,那么try-catch是否對(duì)代碼執(zhí)行性能有影響呢?有如下的try-catch代碼:
將代碼的class文件使用javap命令來(lái)查詢字節(jié)碼指令: 判斷try-catch是否影響性能主要考慮點(diǎn)是看字節(jié)碼中是否增加了代碼的執(zhí)行鏈路(代碼的執(zhí)行行數(shù)是否增加)。
字節(jié)碼中的goto指令表示try代碼中執(zhí)行到最后一行代碼之后,如果代碼語(yǔ)句中沒(méi)有異常拋出,那么通過(guò)goto可以直接跳出try-catch,雖然增加了try-catch后字節(jié)碼變多了但是執(zhí)行的鏈路沒(méi)有變長(zhǎng),所以try中沒(méi)異常的時(shí)候try-catch不會(huì)影響性能。 如果try代碼塊中存在異常,一旦出現(xiàn)了異常,jdk的底層需要搜索catch代碼塊、記錄異常鏈路棧等工作,由于這些工作都需要消耗cpu和內(nèi)存資源,所以在try語(yǔ)句出現(xiàn)異常后,在高并發(fā)下存在一定的性能影響。 總結(jié): (1)在try中無(wú)異常的時(shí)候,try中運(yùn)行完最后一行代碼中,底層通過(guò)goto指令直接跳出了try-catch語(yǔ)句塊,由于執(zhí)行的鏈路沒(méi)有變長(zhǎng),所以性能是不會(huì)存在影響。 (2)如果try中有異常拋出,那么jdk的底層需要做一系列的工作,會(huì)損耗一定的性能。 該文章在 2024/12/9 14:53:46 編輯過(guò) |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |