什么时候不要分解公共代码

One*_*ree 1 java

我应该交换代码紧凑性以获得一点性能吗?具体来说,以下哪两个更可取:

// case 0:
final boolean flag = <some condition>;
for (int i = 0; i < SOME_COUNT; ++i)
{
    if (flag)
    {
        // do foo
    }
    else
    {
        // do bar
    }

}

// case 1:
final boolean flag = <some condition>;
if(flag)
{
    for (int i = 0; i < SOME_COUNT; ++i)
    {
        // do foo
    }
}
else
{
    for (int i = 0; i < SOME_COUNT; ++i)
    {
        // do bar
    }
}
Run Code Online (Sandbox Code Playgroud)

Mat*_*all 5

喜欢前者.大家都知道,JIT能够像第二个一样快速地制作第一个.

具有表现的经验法则:当有疑问时,衡量.当你决定测量时,首先阅读:如何在Java中编写正确的微基准测试?

  • 不要将JIT与分支预测混淆.一个是软件,另一个是硬件.在这种情况下,最终结果是相同的.由于`flag`是常量,因此硬件分支预测器很容易实现. (5认同)