Performance of Exception Handling, Part 2
I decided to test just how much of a performance hit we incur by just handling the exceptions instead of avoiding them. It's worse than I expected.
Here's the code:
public class ExceptionTest {
public static void main(String[] args) {
long start = System.currentTimeMillis();
for (int i = 0; i < 1000000; i ++) {
Object x = null;
String y = "y";
try {
y = x.toString();
} catch (NullPointerException ignored) { }
}
System.out.println(System.currentTimeMillis() - start);
start = System.currentTimeMillis();
for (int i = 0; i < 1000000; i ++) {
Object x = null;
String y = "y";
if (x != null) {
y = x.toString();
}
}
System.out.println(System.currentTimeMillis() - start);
}
}
And the results:
92037 20
Unbelievable! It makes sense though, since the one that used exceptions needed to create 1 million NullPointerException objects, and the other created no objects. This loop amplifies the affect, so maybe it's still not so bad if you're just doing it once through. I think personally, I'm going to start checking nulls again.