首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将JVM优化应用于没有试图捕获错误的函数会抛出异常吗?

将JVM优化应用于没有试图捕获错误的函数会抛出异常吗?
EN

Stack Overflow用户
提问于 2017-12-28 10:26:53
回答 1查看 173关注 0票数 0

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

接下来的一个问题是:“JVM优化应用于一个没有尝试捕获错误的函数是否抛出了一个异常?”例如,所有方法都会抛出它们的异常,主方法有一个尝试捕获来包围所有方法和代码。在这种情况下,根据“有效Java":

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

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

EN

回答 1

Stack Overflow用户

发布于 2017-12-29 10:49:16

如果您指的是throws子句,那么肯定不是。注意,所有方法都有一个“不可见的throws RuntimeException, Error子句”,也就是说,它们可能抛出一些东西。

还要注意的是,JVM级别上没有类似于检查异常的地方,这是一个纯Java源代码特性,在字节码中不存在(还有许多其他语言运行在JVM上,没有检查异常;AFAIK Java是唯一的实验)。

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

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

无论如何,添加抛出子句对性能没有影响,而且大多数情况下都是正确的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48005742

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档