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



有一个问题,在性能方面,试用键和投掷异常有什么区别?。

一个后续问题是"将JVM优化应用于没有试用错误的函数会引发异常吗?"。例如,所有方法都引发其异常,并且主方法具有围绕所有方法和代码的尝试。在这种情况下,根据"有效Java":

将代码放入trycatch块中抑制了现代JVM实现可能执行的某些优化。

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

如果您是指throws子句,那么绝对不是。请注意,所有方法都有一个"不可见的throws RuntimeException, Error子句",即它们可能会扔东西。

另请注意,没有什么比在JVM级别上检查过的例外了,这是一个纯Java源功能,它在字节码中不存在(并且在JVM上运行了许多其他语言,并且没有任何检查例外; Afaik Java; afaik java;是唯一的实验)。

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

对于一个试用块,只有一个条目会被咨询,当例外实际上被抛弃时,否则不会使用它。它可能会阻止一些优化,这将使不可能使用此信息。JVM越来越好。

无论如何,添加throws子句没有性能影响,而且大多数时候是正确的。

最新更新