Re: HotSpot JVMの落とし穴
http://d.hatena.ne.jp/sumii/20071229/p2
ほんとにそんなことが!と思って試してみた。しかし、有意な結果が出ない。
テストプログラムにはこういうプログラムを書いた。
public class Main { public static void main (String[] args) { int n = 100000000; long t0 = System.currentTimeMillis(); int i1 = if_break(n); long t1 = System.currentTimeMillis(); int i2 = if_not_break(n); long t2 = System.currentTimeMillis(); p("if_break : " + (t1 - t0)); p("if_not_break: " + (t2 - t1)); } static void p (String s) { System.out.println(s);} static int if_break (int n) { int i = 0, res = 0; while (true) { res += i; ++i; if (i > n) { break;} else {} } return res; } static int if_not_break (int n) { int i = 0, res = 0; while (true) { res += i; ++i; if (i <= n) {} else { break;} } return res; } }
javapの結果
static int if_break(int); Code: 0: iconst_0 1: istore_1 2: iconst_0 3: istore_2 4: iload_2 5: iload_1 6: iadd 7: istore_2 8: iinc 1, 1 11: iload_1 12: iload_0 13: if_icmple 4 16: goto 19 19: iload_2 20: ireturn static int if_not_break(int); Code: 0: iconst_0 1: istore_1 2: iconst_0 3: istore_2 4: iload_2 5: iload_1 6: iadd 7: istore_2 8: iinc 1, 1 11: iload_1 12: iload_0 13: if_icmpgt 19 16: goto 4 19: iload_2 20: ireturn