2017-12-28 69 views
0

質問がありますWhat is the difference between try-catch and throws Exception in terms of performance? です。try-catchバグのない関数にJVM最適化を適用すると、例外がスローされますか?

フォローアップの質問は、「try-catchバグのない関数にJVM最適化を適用すると例外がスローされますか?」です。たとえば、すべてのメソッドは例外をスローし、mainメソッドにはすべてのメソッドとコードを囲むtry-catchがあります。この場合、「有効なJava」に従って:

try-catchブロック内にコードを配置することで、現代のJVM実装が他の方法で実行する特定の最適化が禁止されます。

JVMはmainメソッドのコードの最適化を行いません。問題は、JVMが例外をスローするメソッドでコードを最適化することですか?

+0

正確に何を意味しているのですか? 'try-catch'を使わないメソッドのJVM最適化が例外をスローするかどうか尋ねていますか?または、 'try-catch'メソッドと' throws Exception'メソッドの最適化の違いを知りたいですか? – diginoise

+0

私はちょっと質問を精緻化します。 – Finch

+0

あなたはどんなバグをしていますか? – DodgyCodeException

答えて

1

throws句を使用している場合は、間違いありません。すべてのメソッドが「表示されないthrows RuntimeException, Error」という句を持っている、つまり何かを投げてしまう可能性があることに注意してください。

また、JVMレベルでチェック例外はありません。これは、バイトコードには存在しない純粋なJavaソース機能です(JVM上で実行されている多くの言語がありますが、チェック例外はありません)。AFAIK Javaは唯一の実験です)。

実際に例外をスローするのは高価ですが、基本的にはどのメソッドでもスローすることができます。空のメソッドでも、理論上はStackOverflowErrorを投げることができます。例外が実際に発生したときには、コストがかかります。

try-catchブロックの場合、例外が実際にスローされたときに参照される部分だけがあり、そうでない場合は使用されません。それは、この情報を使用することを不可能にするいくつかの最適化を妨げる可能性があります。 JVMはますます良くなります。

とにかく、throws節を追加してもパフォーマンスに影響はなく、ほとんどの場合、正しいことです。

関連する問題