将JVM优化应用于没有try-catch错误的函数会引发异常吗?

问题描述 投票:0回答:1

有一个问题What is the difference between try-catch and throws Exception in terms of performance?

后续问题是“JVM优化是否应用于没有try-catch错误的函数会引发异常?”。例如,所有方法都抛出异常,main方法有一个try-catch来包围所有方法和代码。在这种情况下,根据“Effective Java”:

将代码放在try-catch块中会禁止现有JVM实现可能执行的某些优化。

JVM不会对main方法中的代码进行一些优化。问题是:JVM是否优化那些抛出异常的方法中的代码?

java performance exception optimization
1个回答
1
投票

如果你的意思是throws条款,那么绝对不是。请注意,所有方法都有一个“不可见的throws RuntimeException, Error子句”,即它们可能会抛出一些东西。

另请注意,在JVM级别上没有类似已检查的异常,它是纯Java源代码,在字节码中不存在(并且在JVM上运行许多其他语言并且没有检查异常; AFAIK Java是唯一的实验)。

实际上抛出异常是昂贵的,但基本上任何方法都可以抛出一些。即使是空方法也可以在理论上投掷StackOverflowError。当实际发生异常时,它只会变得昂贵。

对于try-catch块,当实际抛出异常时,只有一个可以查询的条目,否则它不会被使用。它可能会阻止一些优化,这将使得无法使用这些信息; JVM变得越来越好。

无论如何,添加throws子句不会对性能产生影响,而且大部分时间都是正确的。

© www.soinside.com 2019 - 2024. All rights reserved.