在重置之前检查重置值的值 - 性能影响?

时间:2012-12-03 18:53:24

标签: java performance variables

我有一个变量,每秒读取和更新数千次。它需要定期重置。但“一半”的时间,该值已经是重置值。在重置(写入操作)之前首先检查值(看它是否需要重置)是一个好主意,或者我应该重置它而不管它?主要目标是优化代码以提高性能。

举例说明:

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个场景(通过取消/评论第2个“if”行),但任何差异都会被运行持续时间的自然差异所掩盖。

感谢。

3 个答案:

答案 0 :(得分:5)

不要检查它。

执行步骤越多=周期越多=时间越长。


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

答案 1 :(得分:0)

检查没有实际的性能影响。我们讨论的是单个时钟周期或其他东西,这通常与Java程序无关(因为硬核数字运算通常不是用Java完成的)。

相反,决定可读性。想想维护者谁将在五年后改变这段代码。

就你的例子而言,使用我的理由,我会跳过检查。

答案 2 :(得分:0)

JIT很可能会优化代码,因为它没有做任何事情。

不要担心性能,通常最好担心它是什么

  • 更易于理解
  • 清洁工具

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

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