程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 淺談JAVA 異常關於機能的影響

淺談JAVA 異常關於機能的影響

編輯:關於JAVA

淺談JAVA 異常關於機能的影響。本站提示廣大學習愛好者:(淺談JAVA 異常關於機能的影響)文章只能為提供參考,不一定能成為您想要的結果。以下是淺談JAVA 異常關於機能的影響正文


在對客戶做技巧支撐時,我們經常會看到許多客戶基本沒認識到的異常。在清除了這些異常以後,代碼運轉速度與之前比擬年夜幅晉升。這讓我們發生一種猜想,就是在代碼外面應用異常會帶來明顯的機能開支。由於異常是毛病情形處置的主要構成部門,摒棄是不太能夠的,所以我們須要權衡異常處置關於機能影響,我們可以經由過程一個試驗看看異常處置的關於機能的影響。

試驗

我的試驗基於一段隨機拋出異常的簡略代碼。從迷信的角度,這並不是完整精確的丈量,同時我也其實不懂得HotSpot 編譯器會對運轉中的代碼做何舉措。但不管若何,這段代碼應當可以或許讓我們懂得一些根本情形。

成果很成心思:拋出與捕捉異常的價值仿佛極低。在我的例子裡,年夜約是每一個異常 0.02 毫秒。除非你真的拋出太多異常(我們指的是 10 萬次或許更多),不然這一點根本都可疏忽。 雖然這些成果顯示出異常處置自己其實不影響代碼機能,但卻並未處理上面這個成績:異常對機能的偉大影響該由誰擔任?

我顯著漏掉了甚麼主要的成績。

從新想了一下,我認識到本身漏掉了異常處置的一個主要部門。我沒斟酌到異常產生時你做了甚麼。在多半情形下你很有能夠不只僅是捕捉異常!而成績就在這裡:普通情形下,你會試圖對成績停止彌補,並讓運用在終究用戶那邊仍能施展功效。所以我漏掉的就是:“”為了處置異常而履行的彌補代碼“”。依照彌補代碼的分歧,機能喪失能夠會變得相當明顯。在某些情形下這能夠意味側重試銜接到辦事器,在另外一些情形下則能夠意味著應用默許的回滾計劃,而這類計劃供給的處理方法確定會帶來異常低劣的機能。關於我們在許多情形下看到的行動,這仿佛給出了很好的說明。

不外我卻不認為剖析到這裡曾經萬事年夜吉,而是覺得這裡還漏掉了其余甚麼器械。

Stack trace

對此成績,我仍很是獵奇,為此監督了搜集 strack trace 時情形機能有何變更。

常常產生的情形應當是如許的:記下異常及其棧軌跡,測驗考試找出成績究竟在哪。

為此我修正了代碼,額定搜集了異常的 strack trace 。這讓情形明顯轉變。對異常的 strack trace 的搜集,其機能影響要比純真捕捉並拋出異常凌駕10倍。是以雖然 strack trace 有助於懂得哪裡產生了成績(有能夠還有助於懂得為什麼產生成績),但卻存在機能喪失。 因為我們議論的並不是一條 strack trace,所以此處的影響常常異常之年夜。 多半情形下,我們都要在多個條理上拋出並捕捉異常。 我們看一個簡略的例子: Web 辦事客戶端銜接到辦事器。起首,Java 庫級別上存在一個銜接掉敗異常。爾後會有框架級別上的客戶端掉敗異常,再今後能夠還會有運用條理上的營業邏輯挪用掉敗異常。到如今為止,總共要匯集三條strack trace。 多半情形下,你都能從日記文件或許運用輸入中看到這些 strack trace,而寫入這些較長的strack trace 常常也會也帶來機能影響。

結論

起首由於存在機能影響而把異常棄之不消並不是良策。異常有助於供給一種分歧的方法來處理運轉時成績,而且有助於寫出清潔的代碼。但我們應當對代碼中拋出的異常數目停止跟蹤,它們能夠招致明顯的機能影響。所以 OneAPM 默許要對所拋出的異常停止跟蹤——在許多情形下人們都邑對代碼中產生的異常和在處理這些異常時的機能消耗覺得受驚不已。 其次雖然應用異常很有裨益,您也應防止捕捉過量的 strack trace。異常應當是為異常的情形而設計的,應用時應當切記這一准繩。固然,萬一您不想服從好的編程習氣,Java 說話就會讓您曉得,那樣做可讓您的法式運轉得更快,從而勉勵您去那樣做。

以上所述就是本文的全體內容了,願望年夜家可以或許愛好。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved