日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

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

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

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

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

掃碼添加小助手

加入工程師交流群

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

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

for(inti=0;i

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

“當然是把 try-catch 提到外面?。 崩详惸X子都不轉一下,脫口而出。

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

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

“回過頭來,catch 整個 for 循環(huán)和在循環(huán)內部 catch,在不出錯的情況下,其實性能差不多?!?我喝一口咖啡不經意地提到,準備在老陳前面秀一下。

“啥意思?”老陳有點懵地看著我,“try-catch是有性能損耗的,我可是看過網上資料的!”

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

publicclassTryCatchTest{

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

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

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

我懶得跟他BB,直接開始了 benchmark,跑的結果如下:

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

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

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

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

我再調小(一般業(yè)務場景 for 循環(huán)次數都不會很多)下 for 循環(huán)的次數為 1000 ,結果也是差不多:

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

老陳一看傻了:“說好的性能影響呢?怎么沒了?”

我直接一個javap,讓老陳看看,其實兩個實現在字節(jié)碼層面沒啥區(qū)別:

tryfor 的字節(jié)碼

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

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

fortry 的字節(jié)碼

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

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

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

“那為什么網上流傳著try-catch會有性能問題的說法?。俊崩详愑X得非常奇怪。

這個說法確實有,在《Effective Java》這本書里就提到了 try-catch 性能問題:

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

并且還有下面一段話:

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

正所謂聽話不能聽一半,以前讀書時候最怕的就是一知半解,因為完全理解選擇題能選對,完全不懂蒙可能蒙對,一知半解必定選到錯誤的選項!

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

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

但有個臥龍偏偏不這樣實現,要通過 try-catch 拐著彎來實現循環(huán):

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

這操作我只能說有點逆天,這兩個實現的對比就有性能損耗了。

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

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

結果如下:

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

+-差不多,直接看前面的分數對比,沒有 ry-catch 的性能確實好些,這也和書中說的 try-catch 會影響 JVM 一些特定的優(yōu)化說法吻合,但是具體沒有說影響哪些優(yōu)化,我猜測可能是指令重排之類的。

好了,我再總結下有關 try-catch 性能問題說法

try-catch 相比較沒 try-catch,確實有一定的性能影響,但是旨在不推薦我們用 try-catch 來代替正常能不用 try-catch 的實現,而不是不讓用 try-catch。

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

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






審核編輯:劉清

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

    關注

    20

    文章

    3012

    瀏覽量

    116871
  • JVM
    JVM
    +關注

    關注

    0

    文章

    161

    瀏覽量

    13088

原文標題:支付寶二面:使用 try-catch 捕獲異常會影響性能嗎?大部分人都會答錯!

文章出處:【微信號:小林coding,微信公眾號:小林coding】歡迎添加關注!文章轉載請注明出處。

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

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

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

    普源示波器DHO5108波形捕獲率評測:高性能與性價比的平衡之選

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

    C++程序異常的處理機制

    語法 C++異常處理涉及到3個關鍵字: throw---拋出一個異常,帶參數 try---用于標識可能會出現異常的代碼段 catch--
    發(fā)表于 12-02 07:12

    電能質量在線監(jiān)測裝置突跳異常數據會修嗎?

    電能質量在線監(jiān)測裝置的突跳異常數據通常會通過 自動修復機制 和 人工干預 相結合的方式進行處理,但具體修復能力取決于設備配置、異常類型及平臺功能。以下是詳細說明: 一、自動修復機制 現代高端監(jiān)測裝置
    的頭像 發(fā)表于 11-05 14:07 ?569次閱讀

    IGBT 樣品異常檢測案例解析

    通過利用Thermal EMMI(熱紅外顯微鏡)去檢測IGBT 樣品異常
    的頭像 發(fā)表于 08-15 09:17 ?2151次閱讀
    IGBT 樣品<b class='flag-5'>異常</b>檢測案例解析

    多次運行AIBase中的析構函數出現意外掉線的情況,怎么解決?

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

    如何捕獲PWM信號?

    我們現在有個需求,DSP在正常工作時會輸出1khz的PWM信號,異常時PWM信號會停止。 芯片需要捕獲DSP輸出的PWM信號,來檢測DSP的狀態(tài)。 如果DSP異常沒有輸出PWM信號,芯片需要在這5S
    發(fā)表于 08-08 06:47

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

    波形捕獲率(Waveform Capture Rate)是數字示波器的關鍵指標之一,指單位時間內示波器能夠捕獲并顯示波形的次數,通常以“次/秒”或“幀/秒”為單位。其本質是衡量示波器在單位時間內對信號變化的響應能力。
    的頭像 發(fā)表于 08-04 15:20 ?1825次閱讀

    機器學習異常檢測實戰(zhàn):用Isolation Forest快速構建無標簽異常檢測系統(tǒng)

    本文轉自:DeepHubIMBA無監(jiān)督異常檢測作為機器學習領域的重要分支,專門用于在缺乏標記數據的環(huán)境中識別異常事件。本文深入探討異常檢測技術的理論基礎與實踐應用,通過IsolationForest
    的頭像 發(fā)表于 06-24 11:40 ?1619次閱讀
    機器學習<b class='flag-5'>異常</b>檢測實戰(zhàn):用Isolation Forest快速構建無標簽<b class='flag-5'>異常</b>檢測系統(tǒng)

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

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

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

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

    HarmonyOS5云服務技術分享--云數據庫使用指南

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

    HarmonyOS5云服務技術分享--ArkTS調用函數

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

    HarmonyOS5云服務技術分享--退出登錄文檔問題

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

    使用STM32捕獲PWM時同時捕獲2個通道時會出現捕獲的頻率值不準確,是什么原因導致的?

    在使用STM32F103芯片的2個定時器捕獲2路PWM波時,當2路信號同時輸入時,會出現捕獲的頻率不準確,但是分開一路一路的輸入捕獲時,捕獲的PWM頻率是正確的,這是什么原因導致的呢?
    發(fā)表于 05-14 06:24
    通州市| 宜兴市| 温宿县| 温州市| 桃源县| 宣恩县| 福海县| 兴海县| 若尔盖县| 丹东市| 布拖县| 广丰县| 博罗县| 房山区| 江达县| 达尔| 锡林郭勒盟| 鄯善县| 阜城县| 厦门市| 武胜县| 新泰市| 临湘市| 交口县| 堆龙德庆县| 田林县| 安乡县| 江津市| 修武县| 新绛县| 封丘县| 贵定县| 乳源| 长乐市| 凤阳县| 道孚县| 镇江市| 榆林市| 招远市| 涡阳县| 武胜县|