有一个问题,在性能方面,试用键和投掷异常有什么区别?。
一个后续问题是"将JVM优化应用于没有试用错误的函数会引发异常吗?"。例如,所有方法都引发其异常,并且主方法具有围绕所有方法和代码的尝试。在这种情况下,根据"有效Java":
将代码放入trycatch块中抑制了现代JVM实现可能执行的某些优化。
JVM不会在主方法中对代码进行一些优化。问题是:剂量JVM在那些抛出异常的方法中优化代码?
如果您是指throws
子句,那么绝对不是。请注意,所有方法都有一个"不可见的throws RuntimeException, Error
子句",即它们可能会扔东西。
另请注意,没有什么比在JVM级别上检查过的例外了,这是一个纯Java源功能,它在字节码中不存在(并且在JVM上运行了许多其他语言,并且没有任何检查例外; Afaik Java; afaik java;是唯一的实验)。
实际上抛出异常是昂贵的,但基本上任何方法都可以抛出一些。从理论上讲,即使是一个空的方法也可以抛出StackOverflowError
。只有当一个例外发生时,它才会变得昂贵。
对于一个试用块,只有一个条目会被咨询,当例外实际上被抛弃时,否则不会使用它。它可能会阻止一些优化,这将使不可能使用此信息。JVM越来越好。
无论如何,添加throws子句没有性能影响,而且大多数时候是正确的。