Bar*_*lom 2 java optimization performance
哪个在Java中更快,为什么?
try {
object.doSomething()
} catch (NullPointerException e) {
if (object == null) {
object = new .....;
object.doSomething();
} else throw e;
}
Run Code Online (Sandbox Code Playgroud)
要么
if (object == null) {
object = new .....;
}
object.doSomething();
Run Code Online (Sandbox Code Playgroud)
为什么?
代码将经常被调用,并且object只是null第一次被调用,所以不要考虑抛出的成本NPE(它只发生一次).
PS我知道第二个更好,因为简单,可读性等,我肯定会在真实的软件中使用它.我知道所有关于过早优化的邪恶,不需要提及它.我只是对这些小细节感到好奇.
你应该绝对使用后一种方式,不是因为它更快,而是因为它更惯用.异常应该不会被用于在Java程序中的控制流.
这纯粹是轶事,但我曾经做过的所有微基准测试表明,使用控制流的异常将不会像条件一样高效,尽管它可能无法作为泛化支持这一点,而且JVM非常善于优化事物无论如何这样,YMMV.
| 归档时间: |
|
| 查看次数: |
171 次 |
| 最近记录: |