簡體   English   中英

是否被應用到不具有的try-catch錯誤拋出一個異常的函數在JVM優化?

[英]Does the JVM optimization being applied to a function that doesn't have try-catch bug throws a exception?

有一個問題,就性能而言,try-catch和throws Exception什么區別?

后續問題是“將JVM優化應用於沒有try-catch錯誤的函數會引發異常嗎?”。 例如,所有方法都拋出異常,而main方法具有try-catch來包圍所有方法和代碼。 在這種情況下,根據“有效的Java”:

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

JVM不會對main方法中的代碼做一些優化。 問題是:在那些拋出異常的方法中,JVM是否優化了代碼?

如果您是說throws子句,那么絕對不是。 請注意,所有方法都具有“不可見的throws RuntimeException, Error子句”,即,它們可能會拋出一些東西。

還要注意,在JVM級別上沒有類似檢查異常的東西,它是字節碼中不存在的純Java源功能(並且有許多其他語言在JVM上運行並且沒有檢查異常; AFAIK Java是唯一的實驗)。

實際上,拋出異常的代價很高,但是基本上任何方法都可以拋出異常。 理論上,即使是空方法也可以引發StackOverflowError 當異常確實發生時,它才變得昂貴。

對於try-catch塊,當實際拋出異常時,在某處只有一個條目可供參考,否則就不會被使用。 它可能會阻止某些優化,從而導致無法使用或無法使用此信息; JVM越來越好。

無論如何,添加throws子句不會影響性能,並且在大多數情況下是正確的選擇。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM