4

我有一个每秒被读取和更新数千次的变量。它需要定期重置。但是“一半”的时候,该值已经是复位值。在重置(写操作)之前先检查值(看看是否需要重置)是个好主意,还是无论如何我都应该重置它?主要目标是优化代码以提高性能。

为了显示:

Random r = new Random();
int val = Integer.MAX_VALUE;

for (int i=0; i<100000000; i++) {
    if (i % 2 == 0)
        val = Integer.MAX_VALUE;
    else
        val = r.nextInt();

    if (val != Integer.MAX_VALUE) //skip check?
        val = Integer.MAX_VALUE;
}

我尝试使用上述程序来测试 2 个场景(通过取消/注释第二个“if”行),但任何差异都被运行持续时间的自然变化所掩盖。

谢谢。

4

3 回答 3

5

不要检查它。

更多的执行步骤 = 更多的周期 = 更多的时间。


顺便说一句,您正在打破基本的软件黄金法则之一:“不要过早优化”。除非你有确凿的证据证明这段代码是一个性能问题,否则你不应该看它。(请注意,这并不意味着您在编写代码时没有考虑性能,您仍然遵循正常的最佳实践,但您不会添加任何唯一目的是“与性能相关”的特殊代码)

于 2012-12-03T18:59:54.790 回答
0

该检查没有实际的性能影响。我们将谈论单个时钟周期或其他东西,这通常与 Java 程序无关(因为在 Java 中通常不进行硬核数字运算)。

相反,应根据可读性做出决定。想想五年后要更改这段代码的维护者。

在你的例子中,使用我的理由,我会跳过检查。

于 2012-12-03T18:59:33.537 回答
0

JIT 很可能会优化代码,因为它什么都不做。

与其担心性能,通常不如担心它是什么

  • 更容易理解
  • 更清洁的实施

在这两种情况下,您都可以删除代码,因为它没有做任何有用的事情,而且还可以使代码更快。

即使它确实使代码变慢了一点,与r.nextInt()不便宜的调用成本相比,它也会非常小。

于 2012-12-03T19:01:48.670 回答