Fai Ng
Fai Ng

Reputation: 790

checking a value for reset value before resetting it - performance impact?

I have a variable that gets read and updated thousands of times a second. It needs to be reset regularly. But "half" the time, the value is already the reset value. Is it a good idea to check the value first (to see if it needs resetting) before resetting (a write operaion), or I should just reset it regardless? The main goal is to optimize the code for performance.

To illustrate:

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;
}

I tried to use the above program to test the 2 scenarios (by un/commenting the 2nd "if" line), but any difference is masked by the natural variance of the run duration time.

Thanks.

Upvotes: 5

Views: 128

Answers (3)

Bohemian
Bohemian

Reputation: 424983

Don't check it.

It's more execution steps = more cycles = more time.


As an aside, you are breaking one of the basic software golden rules: "Don't optimise early". Unless you have hard evidence that this piece if code is a performance problem, you shouldn't be looking at it. (Note that doesn't mean you code without performance in mind, you still follow normal best practice, but you don't add any special code whose only purpose is "performance related")

Upvotes: 5

Peter Lawrey
Peter Lawrey

Reputation: 533442

Most likely the JIT will optimise the code away because it doesn't do anything.

Rather than worrying about performance, it is usually better to worry about what it

  • simpler to understand
  • cleaner to implement

In both cases, you might remove the code as it doesn't do anything useful and it could make the code faster as well.

Even if it did make the code a little slower it would be very small compared to the cost of calling r.nextInt() which is not cheap.

Upvotes: 0

barfuin
barfuin

Reputation: 17474

The check has no actual performance impact. We'd be talking about a single clock cycle or something, which is usually not relevant in a Java program (as hard-core number crunching usually isn't done in Java).

Instead, base the decision on readability. Think of the maintainer who's going to change this piece of code five years on.

In the case of your example, using my rationale, I would skip the check.

Upvotes: 0

Related Questions