Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 什么时候不考虑常见代码_Java - Fatal编程技术网

Java 什么时候不考虑常见代码

Java 什么时候不考虑常见代码,java,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 fl

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

// 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
    }
}
//案例0:
最终布尔标志=;
for(int i=0;i
喜欢前者。据你所知,JIT能够使第一个和第二个一样快


绩效的经验法则:如果有疑问,请测量。如果您决定测量,请先阅读:

考虑到
标志
属性是常量非易失性,我会选择第二个选项

既然你已经知道结果,为什么还要花时间检查一个条件

一开始就检查一下,然后做你的事

请注意,您可能还需要执行一些取决于标志值的操作,并且需要在for循环外部执行

在第二种情况下,它与在条件分支中添加新行一样简单

在第一种情况下,您需要再次检查for循环之外的条件我将使用选项0。 两件事:

  • 这更接近代码的意图(至少我是这样理解你的问题的,事实上,代码)。这将使将来维护代码变得更容易-很难想象您提议的更改实际会花费多少时间,但我相信您节省的开发时间将始终超过您节省的数量级
  • 其次,即时编译意味着您甚至可能不会在性能方面帮自己一个忙,因为java虚拟机可能会帮您发现案例1是否确实更好,并做出相应的反应

用Donald Knuth的话说,过早优化是万恶之源。使用第一个。测试将花费你几纳秒。在确定(即,您已经测量并证明)您存在性能问题之前,不要不必要地复制代码。Q:
何时不排除常见代码
/a:何时未使用探查器查看实际花费的时间:)这极不可能产生明显的差异。这样,它只会成为一种风格偏好(因此脱离主题)。不要混淆JIT和分支预测。一个是软件,另一个是硬件。在这种情况下,最终结果是相同的。由于
标志
是常数,硬件分支预测器很容易将其正确设置。@术语“分支预测”是否仅指硬件?如果是这样的话,请点击TIL,并毫不犹豫地编辑我的答案,以便更准确地使用术语。说到优化,我知道你比我知道得多。“分支预测”仅指硬件进行猜测。对于软件(JIT、编译器、程序员),它只是一个没有直接方式与之交互的黑盒子。(但了解黑匣子如何工作的JIT/编译器/程序员仍然可以通过正确的方式影响其行为。)在这种情况下,我不认为牺牲可读性和简洁性来换取性能之神是正确的。这是正确的,即使在最坏的情况下,分支预测器也会快速处理这个常量
布尔值