我有一个变量,每秒读取和更新数千次。它需要定期重置。但“一半”的时间,该值已经是重置值。在重置(写入操作)之前首先检查值(看它是否需要重置)是一个好主意,或者我应该重置它而不管它?主要目标是优化代码以提高性能。
举例说明:
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”行),但任何差异都会被运行持续时间的自然差异所掩盖。
感谢。
答案 0 :(得分:5)
不要检查它。
执行步骤越多=周期越多=时间越长。
顺便说一句,你打破了一个基本的软件黄金规则:“不要尽早优化”。除非你有确凿的证据证明代码是性能问题,否则你不应该看它。 (请注意,这并不意味着您在没有性能的情况下进行编码,您仍然遵循正常的最佳做法,但您不会添加任何特殊代码,其唯一目的是“与性能相关”)
答案 1 :(得分:0)
检查没有实际的性能影响。我们讨论的是单个时钟周期或其他东西,这通常与Java程序无关(因为硬核数字运算通常不是用Java完成的)。
相反,决定可读性。想想维护者谁将在五年后改变这段代码。
就你的例子而言,使用我的理由,我会跳过检查。
答案 2 :(得分:0)
JIT很可能会优化代码,因为它没有做任何事情。
不要担心性能,通常最好担心它是什么
在这两种情况下,您可能会删除代码,因为它没有做任何有用的事情,它也可以使代码更快。
即使它确实使代码变慢了,但与调用r.nextInt()
并不便宜的成本相比,它会非常小。