chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

使用try-catch捕獲異常會(huì)影響性能嗎?

小林coding ? 來(lái)源:yes的練級(jí)攻略 ? 2023-04-01 11:08 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

“你看著這鬼代碼,竟然在 for 循環(huán)里面搞了個(gè) try-catch,不知道try-catch有性能損耗嗎?”

老陳煞有其事地指著屏幕里的代碼:

for(inti=0;i

我探過(guò)頭去看了眼代碼,“那老陳你覺(jué)得該怎么改?”

“當(dāng)然是把 try-catch 提到外面啊!”老陳腦子都不轉(zhuǎn)一下,脫口而出。

“你是不是傻?且不說(shuō)性能,這代碼的目的明顯是讓循環(huán)內(nèi)部單次調(diào)用出錯(cuò)不影響循環(huán)的運(yùn)行,你其到外面業(yè)務(wù)邏輯不就變了嗎!”

老陳撓了撓他的地中海,“好像也是??!”

“回過(guò)頭來(lái),catch 整個(gè) for 循環(huán)和在循環(huán)內(nèi)部 catch,在不出錯(cuò)的情況下,其實(shí)性能差不多?!?我喝一口咖啡不經(jīng)意地提到,準(zhǔn)備在老陳前面秀一下。

“啥意思?”老陳有點(diǎn)懵地看著我,“try-catch是有性能損耗的,我可是看過(guò)網(wǎng)上資料的!”

果然,老陳上鉤了,我二話不說(shuō)直接打開(kāi) idea,一頓操作敲了以下代碼:

publicclassTryCatchTest{

@Benchmark
publicvoidtryfor(Blackholeblackhole){
try{
for(inti=0;i

“BB 不如 show code,看到?jīng)],老陳,我把 try-catch 從 for 循環(huán)里面提出來(lái)跟在for循環(huán)里面做個(gè)對(duì)比跑一下,你猜猜兩個(gè)差多少?”

“切,肯定 tryfor 性能好,想都不用想,不是的話我倒立洗頭!”老陳信誓旦旦道。

我懶得跟他BB,直接開(kāi)始了 benchmark,跑的結(jié)果如下:

600c01bc-bb5d-11ed-bfe3-dac502259ad0.png

可以看到,兩者的性能(數(shù)字越大越好)其實(shí)差不多:

fortry: 86,261(100359-14098) ~ 114,457(100359+14098)

tryfor: 95,961(103216-7255) ~ 110,471(103216+7255)

我再調(diào)小(一般業(yè)務(wù)場(chǎng)景 for 循環(huán)次數(shù)都不會(huì)很多)下 for 循環(huán)的次數(shù)為 1000 ,結(jié)果也是差不多:

6023335a-bb5d-11ed-bfe3-dac502259ad0.png

老陳一看傻了:“說(shuō)好的性能影響呢?怎么沒(méi)了?”

我直接一個(gè)javap,讓老陳看看,其實(shí)兩個(gè)實(shí)現(xiàn)在字節(jié)碼層面沒(méi)啥區(qū)別:

tryfor 的字節(jié)碼

異常表記錄的是 0 - 20 行,如果這些行里面的代碼出現(xiàn)問(wèn)題,直接跳到 23 行處理。

603a6c1e-bb5d-11ed-bfe3-dac502259ad0.png

fortry 的字節(jié)碼

差別也就是異常表的范圍小點(diǎn),包的是 9-14 行,其它跟 tryfor 都差不多。

60bda0fc-bb5d-11ed-bfe3-dac502259ad0.png圖片

所以從字節(jié)碼層面來(lái)看,沒(méi)拋錯(cuò)兩者的執(zhí)行效率其實(shí)沒(méi)啥差別。

“那為什么網(wǎng)上流傳著try-catch會(huì)有性能問(wèn)題的說(shuō)法???”老陳覺(jué)得非常奇怪。

這個(gè)說(shuō)法確實(shí)有,在《Effective Java》這本書(shū)里就提到了 try-catch 性能問(wèn)題:

61350138-bb5d-11ed-bfe3-dac502259ad0.png

并且還有下面一段話:

615dbf10-bb5d-11ed-bfe3-dac502259ad0.png圖片

正所謂聽(tīng)話不能聽(tīng)一半,以前讀書(shū)時(shí)候最怕的就是一知半解,因?yàn)橥耆斫膺x擇題能選對(duì),完全不懂蒙可能蒙對(duì),一知半解必定選到錯(cuò)誤的選項(xiàng)!

《Effective Java》書(shū)中說(shuō)的其實(shí)是不要用 try-catch 來(lái)代替正常的代碼,書(shū)中的舉例了正常的 for 循環(huán)肯定這樣實(shí)現(xiàn):

6196087a-bb5d-11ed-bfe3-dac502259ad0.png

但有個(gè)臥龍偏偏不這樣實(shí)現(xiàn),要通過(guò) try-catch 拐著彎來(lái)實(shí)現(xiàn)循環(huán):

61a86c7c-bb5d-11ed-bfe3-dac502259ad0.png

這操作我只能說(shuō)有點(diǎn)逆天,這兩個(gè)實(shí)現(xiàn)的對(duì)比就有性能損耗了。

我們直接再跑下有try-catch 的代碼和沒(méi) try-catch的 for 循環(huán)區(qū)別,代碼如下:

6202e3e6-bb5d-11ed-bfe3-dac502259ad0.png

結(jié)果如下:

621415ee-bb5d-11ed-bfe3-dac502259ad0.png

+-差不多,直接看前面的分?jǐn)?shù)對(duì)比,沒(méi)有 ry-catch 的性能確實(shí)好些,這也和書(shū)中說(shuō)的 try-catch 會(huì)影響 JVM 一些特定的優(yōu)化說(shuō)法吻合,但是具體沒(méi)有說(shuō)影響哪些優(yōu)化,我猜測(cè)可能是指令重排之類(lèi)的。

好了,我再總結(jié)下有關(guān) try-catch 性能問(wèn)題說(shuō)法

try-catch 相比較沒(méi) try-catch,確實(shí)有一定的性能影響,但是旨在不推薦我們用 try-catch 來(lái)代替正常能不用 try-catch 的實(shí)現(xiàn),而不是不讓用 try-catch。

for循環(huán)內(nèi)用 try-catch 和用 try-catch 包裹整個(gè) for 循環(huán)性能差不多,但是其實(shí)兩者本質(zhì)上是業(yè)務(wù)處理方式的不同,跟性能扯不上關(guān)系,關(guān)鍵看你的業(yè)務(wù)流程處理。

雖然知道try-catch會(huì)有性能影響,但是業(yè)務(wù)上不需要避諱其使用,業(yè)務(wù)實(shí)現(xiàn)優(yōu)先(只要不是書(shū)中舉例的那種逆天代碼就行),非特殊情況下性能都是其次,有意識(shí)地避免大范圍的try-catch,只 catch 需要的部分即可(沒(méi)把握全 catch 也行,代碼安全執(zhí)行第一)。






審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • JAVA
    +關(guān)注

    關(guān)注

    20

    文章

    3005

    瀏覽量

    116813
  • JVM
    JVM
    +關(guān)注

    關(guān)注

    0

    文章

    161

    瀏覽量

    13084

原文標(biāo)題:支付寶二面:使用 try-catch 捕獲異常會(huì)影響性能嗎?大部分人都會(huì)答錯(cuò)!

文章出處:【微信號(hào):小林coding,微信公眾號(hào):小林coding】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    TDS3052B:性能與效率的可靠保障

    核心性能與技術(shù)特點(diǎn): 優(yōu)異的信號(hào)保真度與捕獲能力 500 MHz 帶寬 ,支持準(zhǔn)確捕獲高速數(shù)字信號(hào)與模擬信號(hào)。 5 GS/s 采樣率 (單通道),確保高分辨率信號(hào)重建。 采用 數(shù)字熒光技術(shù) ,提供
    的頭像 發(fā)表于 01-16 09:34 ?167次閱讀
    TDS3052B:<b class='flag-5'>性能</b>與效率的可靠保障

    普源示波器DHO5108波形捕獲率評(píng)測(cè):高性能與性?xún)r(jià)比的平衡之選

    在電子測(cè)試領(lǐng)域,示波器的波形捕獲率是衡量其性能的核心指標(biāo)之一。面對(duì)高頻信號(hào)、瞬態(tài)異常及復(fù)雜波形的測(cè)量需求,普源DHO5108示波器憑借其高達(dá)1,000,000波形/秒(wfms/s)的捕獲
    的頭像 發(fā)表于 12-17 16:14 ?452次閱讀
    普源示波器DHO5108波形<b class='flag-5'>捕獲</b>率評(píng)測(cè):高<b class='flag-5'>性能</b>與性?xún)r(jià)比的平衡之選

    C++程序異常的處理機(jī)制

    語(yǔ)法 C++異常處理涉及到3個(gè)關(guān)鍵字: throw---拋出一個(gè)異常,帶參數(shù) try---用于標(biāo)識(shí)可能會(huì)出現(xiàn)異常的代碼段 catch--
    發(fā)表于 12-02 07:12

    多次運(yùn)行AIBase中的析構(gòu)函數(shù)出現(xiàn)意外掉線的情況,怎么解決?

    第一次運(yùn)行無(wú)異常,但是第二次運(yùn)行這里會(huì)意外掉線,try+catch同樣無(wú)法捕捉,大家如何析構(gòu)yolo的? 目前解決辦法就是注釋掉這段代碼,不釋放是否會(huì)出現(xiàn)問(wèn)題,雖然暫時(shí)沒(méi)發(fā)現(xiàn)異常
    發(fā)表于 08-14 07:10

    如何捕獲PWM信號(hào)?

    我們現(xiàn)在有個(gè)需求,DSP在正常工作時(shí)會(huì)輸出1khz的PWM信號(hào),異常時(shí)PWM信號(hào)會(huì)停止。 芯片需要捕獲DSP輸出的PWM信號(hào),來(lái)檢測(cè)DSP的狀態(tài)。 如果DSP異常沒(méi)有輸出PWM信號(hào),芯片需要在這5S
    發(fā)表于 08-08 06:47

    示波器波形捕獲率的定義和作用

    波形捕獲率(Waveform Capture Rate)是數(shù)字示波器的關(guān)鍵指標(biāo)之一,指單位時(shí)間內(nèi)示波器能夠捕獲并顯示波形的次數(shù),通常以“次/秒”或“幀/秒”為單位。其本質(zhì)是衡量示波器在單位時(shí)間內(nèi)對(duì)信號(hào)變化的響應(yīng)能力。
    的頭像 發(fā)表于 08-04 15:20 ?1768次閱讀

    普源DHO5104波形捕獲率對(duì)偶發(fā)故障診斷的影響

    一、偶發(fā)故障診斷的挑戰(zhàn)與波形捕獲率的核心價(jià)值 偶發(fā)故障(Intermittent Fault)具有隨機(jī)性強(qiáng)、持續(xù)時(shí)間短、復(fù)現(xiàn)概率低等特點(diǎn),傳統(tǒng)示波器常因波形捕獲速率不足而難以捕捉到關(guān)鍵信號(hào)異常。例如
    的頭像 發(fā)表于 06-19 15:14 ?724次閱讀
    普源DHO5104波形<b class='flag-5'>捕獲</b>率對(duì)偶發(fā)故障診斷的影響

    泰克示波器高級(jí)觸發(fā)功能捕獲異常信號(hào)的5種方法

    在電子工程領(lǐng)域,示波器是調(diào)試和分析信號(hào)的核心工具,而泰克示波器憑借其強(qiáng)大的高級(jí)觸發(fā)功能,能夠精準(zhǔn)捕獲異常信號(hào),幫助工程師快速定位問(wèn)題。本文將詳細(xì)介紹五種利用泰克示波器高級(jí)觸發(fā)功能捕獲異常
    的頭像 發(fā)表于 05-29 09:38 ?1610次閱讀
    泰克示波器高級(jí)觸發(fā)功能<b class='flag-5'>捕獲</b><b class='flag-5'>異常</b>信號(hào)的5種方法

    HarmonyOS5云服務(wù)技術(shù)分享--云數(shù)據(jù)庫(kù)使用指南

    ?? ??性能優(yōu)化??: 避免頻繁小數(shù)據(jù)寫(xiě)入,優(yōu)先批量操作。 復(fù)雜查詢(xún)盡量在服務(wù)端預(yù)過(guò)濾,減少數(shù)據(jù)傳輸量。 ??錯(cuò)誤處理??: 所有操作建議包裹在try-catch中,捕獲異步異常。
    發(fā)表于 05-22 18:29

    HarmonyOS5云服務(wù)技術(shù)分享--ArkTS調(diào)用函數(shù)

    ); ?? 避坑指南: 文件參數(shù)建議使用JSON對(duì)象傳遞 大文件傳輸記得調(diào)整超時(shí)時(shí)間(默認(rèn)70秒) 錯(cuò)誤處理別忘記加try-catch塊 生產(chǎn)環(huán)境務(wù)必做好安全認(rèn)證 ? 實(shí)戰(zhàn)技巧: 通過(guò)
    發(fā)表于 05-22 18:22

    HarmonyOS5云服務(wù)技術(shù)分享--退出登錄文檔問(wèn)題

    (別只說(shuō)「操作失敗」) 提供備選驗(yàn)證方式 連續(xù)錯(cuò)誤后鎖定要人性化(別永久封禁) 五、說(shuō)點(diǎn)掏心窩的話 其實(shí)認(rèn)證模塊最讓人頭疼的不是代碼,而是各種邊界情況處理。建議大家在開(kāi)發(fā)時(shí): 多用try-catch包裹
    發(fā)表于 05-22 17:01

    使用STM32捕獲PWM時(shí)同時(shí)捕獲2個(gè)通道時(shí)會(huì)出現(xiàn)捕獲的頻率值不準(zhǔn)確,是什么原因?qū)е碌模?/a>

    在使用STM32F103芯片的2個(gè)定時(shí)器捕獲2路PWM波時(shí),當(dāng)2路信號(hào)同時(shí)輸入時(shí),會(huì)出現(xiàn)捕獲的頻率不準(zhǔn)確,但是分開(kāi)一路一路的輸入捕獲時(shí),捕獲的PWM頻率是正確的,這是什么原因?qū)е碌哪兀?/div>
    發(fā)表于 05-14 06:24

    使用STM32捕獲PWM時(shí)同時(shí)捕獲2個(gè)通道時(shí)會(huì)出現(xiàn)捕獲的頻率值不準(zhǔn)確是什么原因?qū)е碌模?/a>

    在使用STM32F103芯片的2個(gè)定時(shí)器捕獲2路PWM波時(shí),當(dāng)2路信號(hào)同時(shí)輸入時(shí),會(huì)出現(xiàn)捕獲的頻率不準(zhǔn)確,但是分開(kāi)一路一路的輸入捕獲時(shí),捕獲的PWM頻率是正確的,這是什么原因?qū)е碌哪兀?/div>
    發(fā)表于 04-27 08:39

    使用STM32捕獲PWM時(shí)同時(shí)捕獲2個(gè)通道時(shí)會(huì)出現(xiàn)捕獲的頻率值不準(zhǔn)確的問(wèn)題,是什么原因?qū)е碌模?/a>

    在使用STM32F103芯片的2個(gè)定時(shí)器捕獲2路PWM波時(shí),當(dāng)2路信號(hào)同時(shí)輸入時(shí),會(huì)出現(xiàn)捕獲的頻率不準(zhǔn)確,但是分開(kāi)一路一路的輸入捕獲時(shí),捕獲的PWM頻率是正確的,這是什么原因?qū)е碌哪兀?/div>
    發(fā)表于 04-25 08:29

    使用STM32捕獲PWM時(shí)同時(shí)捕獲2個(gè)通道時(shí)會(huì)出現(xiàn)捕獲的頻率值不準(zhǔn),為什么?

    在使用STM32F103芯片的2個(gè)定時(shí)器捕獲2路PWM波時(shí),當(dāng)2路信號(hào)同時(shí)輸入時(shí),會(huì)出現(xiàn)捕獲的頻率不準(zhǔn)確,但是分開(kāi)一路一路的輸入捕獲時(shí),捕獲的PWM頻率是正確的,這是什么原因?qū)е碌哪兀?/div>
    發(fā)表于 04-22 10:43