[讨论] try catch放循环体内还是外?

RednaxelaFX 2011-08-05
richard_2010 写道
跟我想的差不多

不吧,我猜实际上跟你想的应该是不一样。
前面说了,性能受不受影响要看情况。这个例子用JDK6u23的client VM跑正好没受影响而已。结论不能泛化。

richard_2010 写道

话说怎么弄成汇编码来看?

上面写了,PrintAssembly。在ItEye搜一下能找到以前的一些帖,例如这个
richard_2010 2011-08-05
再次表示感谢,我慢慢消化去
chenchao051 2011-08-05
《Effective Java 2》 , Item57,Use exceptions only for exceptional conditions

huxi 2011-08-05
RednaxelaFX 写道
首先,语义不同的东西是不适合用来比较性能的。有时候是迫于逻辑需要你不得不把try/catch放在循环内,这个时候就算你知道放在循环外比较快也没办法——除非做更大的代码变更来避开把try/catch放在循环内的需求。
其次,简单来说字节码是看不出性能问题的。

引用撒迦曾经说过的话,用字节码来解释性能问题很抱歉也是比较不靠谱的。字节码用于解释“语义问题”很靠谱,但看字节码是看不出性能问题的——超过它的抽象层次了。
RednaxelaFX 写道
所以在这里例子里两个版本在不抛异常的时候在循环里的性能会是一样的。

这个你好像在哪说过,具体忘了。
RednaxelaFX 2011-08-05
huxi 写道
RednaxelaFX 写道
所以在这里例子里两个版本在不抛异常的时候在循环里的性能会是一样的。

这个你好像在哪说过,具体忘了。

嗯,我记得在某个分享上说过try/catch与循环需要一起使用的时候,如果需求允许那把循环放在try/catch内会比把try/catch放在循环内要更有机会得到更好的优化。因为一般循环是重点优化对象,如果循环内部的控制流比较简单的话,分析和优化就会比较方便;把循环放在try/catch里面的话,就循环自己来看内部的控制流会比反过来放要简单一些。
Global site tag (gtag.js) - Google Analytics