有一个问题,What is the difference between try-catch and throws Exception in terms of performance? 。
接下来的一个问题是:“JVM优化应用于一个没有尝试捕获错误的函数是否抛出了一个异常?”例如,所有方法都会抛出它们的异常,主方法有一个尝试捕获来包围所有方法和代码。在这种情况下,根据“有效Java":
将代码放置在try-catch块中会抑制现代JVM实现可能执行的某些优化。
JVM不会对主方法中的代码进行一些优化。问题是: JVM是否在抛出异常的方法中优化代码?
发布于 2017-12-29 10:49:16
如果您指的是throws子句,那么肯定不是。注意,所有方法都有一个“不可见的throws RuntimeException, Error子句”,也就是说,它们可能抛出一些东西。
还要注意的是,JVM级别上没有类似于检查异常的地方,这是一个纯Java源代码特性,在字节码中不存在(还有许多其他语言运行在JVM上,没有检查异常;AFAIK Java是唯一的实验)。
实际上,抛出异常很昂贵,但基本上任何方法都可以抛出一些异常。理论上,即使是一个空方法也可以抛出一个StackOverflowError。只有当一个异常发生时,它才会变得昂贵。
对于一个try-catch块,只有一个条目可以被查询,当异常被实际抛出时,否则它就不会被使用。它可能会阻止某些优化,这会使您无法使用这些信息,或者不使用这些信息;JVM变得越来越好。
无论如何,添加抛出子句对性能没有影响,而且大多数情况下都是正确的。
https://stackoverflow.com/questions/48005742
复制相似问题