finalをつけたらパフォーマンスが落ちたでござるの巻
山岳信仰の盛んだった日本では山奥の開発現場など、まだまだfinal信仰が盛んなわけですが、先ほどのコードにfinalを付けてみました。
public static void main(String[] args) { final int NUM = 31; long start = System.currentTimeMillis(); for (int i = 0; i < Integer.MAX_VALUE; i++) { int hash = 17; hash = hash * NUM + i; hash = hash * NUM + i; hash = hash * NUM + i; hash = hash * NUM + i; hash = hash * NUM + i; } System.out.println(System.currentTimeMillis() - start); }
NUMはhashでかける時の定数なのでfinalで再代入できないようにしてパフォーマンスアップだぜ!とか考えたとしましょう。
VM | final無 | final有 |
Java5.0 u17 | 11,328 | 14,047 |
Java6 u12 | 6,437 | 9,109 |
finalの効果バッチリですね!