值比较和值赋值之间是否存在性能差异?

Xåp*_* - 4 java optimization performance jvm atomic

请考虑以下两个代码示例:

例1.

public void setValue(int value)
{
    mValue = value;
}
Run Code Online (Sandbox Code Playgroud)

例2.

public void setValue(int value)
{
    if (mValue != value)
    {
        mValue = value;
    }
}
Run Code Online (Sandbox Code Playgroud)

假装您的任务是将一些Java代码优化到绝对最大值,超出所有常识.

第二个代码示例是第一个的优化吗?我的意思是,在最低级别的Java或JVM中if条件检查和int赋值之间是否存在任何差异(无论多么微小)?

NPE*_*NPE 9

第二种可能是反优化,因为在现代处理器上,分支往往很昂贵(主要是因为分支错误预测的代价非常高).

确定的唯一方法是在代表性输入上分析您的代码.请参阅如何在Java中编写正确的微基准测试?关于如何建立有意义的微观基准的一些指示.

请记住,如果相关代码不占整个CPU时间的很大一部分,那么世界上的所有优化都不会对应用程序的整体性能产生很大影响.

  • 如果你很幸运,条件分支将很容易预测,并且不比典型的操作贵.如果你运气不好,它必须在执行的很大一部分时间内清空管道. (3认同)