首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Java异常有多慢?

Java异常有多慢?

提问于 2017-12-25 17:33:28
回答 2关注 0查看 698

问题:Java中的异常处理实际上很慢吗?

传统的观点以及大量的结果都表明,特殊的逻辑不应该用于Java中的正常程序流程。通常有两个原因,

它真的很慢 - 甚至比普通代码慢一个数量级(所给出的原因各不相同),

它杂乱无章,因为人们只希望在特殊代码中处理错误。

作为一个例子,这个页面将Java异常处理描述为“非常慢”,并且将慢速与创建异常消息字符串相关联 - “然后使用该字符串创建抛出的异常对象,这不是很快。Java中的有效异常处理( The Effective Exception Handling)在Java中表示,“其原因是由于异常处理的对象创建方面的原因,从而导致异常抛出异常缓慢”。另一个原因是堆栈跟踪的生成是减慢速度。

我的测试(在32位Linux上使用Java 1.6.0_07,Java HotSpot 10.0)表明异常处理不会比普通代码慢。我试着在执行一些代码的循环中运行一个方法。在该方法的最后,我使用一个布尔值来指示是返回还是抛出。这样的实际处理是一样的。我试着以不同的顺序运行这些方法,并平均测试时间,认为这可能是JVM热身。在我所有的测试中,投掷的速度至少与回归速度一样快,如果不快的话(速度快3.1%)。我对我的测试是错误的可能性完全保持开放,但是在代码示例,测试比较或上一两年的结果中,我没有看到任何东西,它们显示Java中的异常处理实际上是慢的。

导致我走这条路的是我需要使用的API,它将异常作为正常控制逻辑的一部分。我想纠正他们的用法,但现在我可能无法。相反,我会不得不赞扬他们的前瞻性思维?

在“ 即时编译中的高效的Java异常处理”一文中,作者指出,即使没有异常抛出,异常处理程序的存在也足以阻止JIT编译器正确地优化代码,从而降低其速度。我还没有测试过这个理论。

回答

和开发者交流更多问题细节吧,去 写回答
相关文章

相似问题

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