亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

即使從不拋出異常,使用try-catch塊是否昂貴?

即使從不拋出異常,使用try-catch塊是否昂貴?

慕哥6287543 2019-08-06 17:09:32
即使從不拋出異常,使用try-catch塊是否昂貴?我們知道捕獲異常是昂貴的。但是,即使從未拋出異常,在Java中使用try-catch塊也是昂貴的嗎?我發現Stack Overflow問題/答案為什么嘗試塊昂貴?,但它適用于.NET。
查看完整描述

3 回答

?
慕絲7291255

TA貢獻1859條經驗 獲得超6個贊

try幾乎沒有任何費用。try代碼的元數據不是在運行時進行設置,而是在編譯時進行結構化,這樣當拋出異常時,它現在會執行相對昂貴的操作,即向上移動堆棧并查看是否try存在任何可以捕獲此異常的塊例外。從外行的角度來看,try也許是免費的。它實際上拋出了讓你付出代價的例外 - 但除非你拋出數百或數千例外,否則你仍然不會注意到成本。


try有一些與之相關的小成本。Java不能對try塊中的代碼進行一些優化,否則它會執行。例如,Java通常會在方法中重新排列指令以使其運行得更快 - 但Java還需要保證如果拋出異常,就會觀察到方法的執行,就好像它的語句一樣,在源代碼中執行,執行按順序排隊。

因為在一個try塊中可以拋出異常(在try塊的任何一行!異步拋出一些異常,例如通過調用stop一個Thread(不推薦使用),甚至OutOfMemoryError幾乎可以在任何地方發生)然而它可以捕獲并且代碼在之后以相同的方法繼續執行,更難以推斷可以進行的優化,因此它們不太可能發生。(有人必須對編譯器進行編程才能完成它們,推理并保證正確性等等。對于那些意味著'特殊'的事情來說,這將是一件巨大的痛苦。)但是,實際上你不會注意到這樣的事情。


查看完整回答
反對 回復 2019-08-06
?
紅顏莎娜

TA貢獻1842條經驗 獲得超13個贊

trycatch可能會對性能產生一些影響。這是因為它阻止JVM進行一些優化。Joshua Bloch在“Effective Java”中說過以下內容:

?將代碼放在try-catch塊中會禁止現有JVM實現可能執行的某些優化。


查看完整回答
反對 回復 2019-08-06
  • 3 回答
  • 0 關注
  • 867 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號