为了账号安全,请及时绑定邮箱和手机立即绑定

即使从不抛出异常,使用try-catch块是否昂贵?

即使从不抛出异常,使用try-catch块是否昂贵?

慕哥6287543 2019-08-06 17:09:32
即使从不抛出异常,使用try-catch块是否昂贵?我们知道捕获异常是昂贵的。但是,即使从未抛出异常,在Java中使用try-catch块也是昂贵的吗?我发现Stack Overflow问题/答案为什么尝试块昂贵?,但它适用于.NET。
查看完整描述

3 回答

?
慕丝7291255

TA贡献1859条经验 获得超6个赞

try几乎没有任何费用。try代码的元数据不是在运行时进行设置,而是在编译时进行结构化,这样当抛出异常时,它现在会执行相对昂贵的操作,即向上移动堆栈并查看是否try存在任何可以捕获此异常的块例外。从外行的角度来看,try也许是免费的。它实际上抛出了让你付出代价的例外 - 但除非你抛出数百或数千例外,否则你仍然不会注意到成本。


try有一些与之相关的小成本。Java不能对try块中的代码进行一些优化,否则它会执行。例如,Java通常会在方法中重新排列指令以使其运行得更快 - 但Java还需要保证如果抛出异常,就会观察到方法的执行,就好像它的语句一样,在源代码中执行,执行按顺序排队。

因为在一个try块中可以抛出异常(在try块的任何一行!异步抛出一些异常,例如通过调用stop一个Thread(不推荐使用),甚至OutOfMemoryError几乎可以在任何地方发生)然而它可以捕获并且代码在之后以相同的方法继续执行,更难以推断可以进行的优化,因此它们不太可能发生。(有人必须对编译器进行编程才能完成它们,推理并保证正确性等等。对于那些意味着'特殊'的事情来说,这将是一件巨大的痛苦。)但是,实际上你不会注意到这样的事情。


查看完整回答
反对 回复 2019-08-06
?
红颜莎娜

TA贡献1842条经验 获得超12个赞

trycatch可能会对性能产生一些影响。这是因为它阻止JVM进行一些优化。Joshua Bloch在“Effective Java”中说过以下内容:

•将代码放在try-catch块中会禁止现有JVM实现可能执行的某些优化。


查看完整回答
反对 回复 2019-08-06
  • 3 回答
  • 0 关注
  • 775 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信