3 回答

TA貢獻1859條經驗 獲得超6個贊
try
幾乎沒有任何費用。try
代碼的元數據不是在運行時進行設置,而是在編譯時進行結構化,這樣當拋出異常時,它現在會執行相對昂貴的操作,即向上移動堆棧并查看是否try
存在任何可以捕獲此異常的塊例外。從外行的角度來看,try
也許是免費的。它實際上拋出了讓你付出代價的例外 - 但除非你拋出數百或數千例外,否則你仍然不會注意到成本。
try
有一些與之相關的小成本。Java不能對try
塊中的代碼進行一些優化,否則它會執行。例如,Java通常會在方法中重新排列指令以使其運行得更快 - 但Java還需要保證如果拋出異常,就會觀察到方法的執行,就好像它的語句一樣,在源代碼中執行,執行按順序排隊。
因為在一個try
塊中可以拋出異常(在try塊的任何一行!異步拋出一些異常,例如通過調用stop
一個Thread(不推薦使用),甚至OutOfMemoryError幾乎可以在任何地方發生)然而它可以捕獲并且代碼在之后以相同的方法繼續執行,更難以推斷可以進行的優化,因此它們不太可能發生。(有人必須對編譯器進行編程才能完成它們,推理并保證正確性等等。對于那些意味著'特殊'的事情來說,這將是一件巨大的痛苦。)但是,實際上你不會注意到這樣的事情。

TA貢獻1842條經驗 獲得超13個贊
try
/ catch
可能會對性能產生一些影響。這是因為它阻止JVM進行一些優化。Joshua Bloch在“Effective Java”中說過以下內容:
?將代碼放在try-catch塊中會禁止現有JVM實現可能執行的某些優化。
添加回答
舉報