Just for kicks, I tried it on a 64 bit Athlon, linux_x86_64, jvm=64 bit Sun 1.6 -server. The explicit loop counter was 50% faster (for N=10... the inner loop)
-Yonik On Tue, Apr 8, 2008 at 8:21 PM, Yonik Seeley <[EMAIL PROTECTED]> wrote: > On Tue, Apr 8, 2008 at 7:48 PM, robert engels <[EMAIL PROTECTED]> wrote: > > That is opposite of my testing:... > > > > The 'foreach' is consistently faster. > > It's consistently slower for me (I tested java5 and java6 both with > -server on a P4). > I'm a big fan of testing different methods in different test runs > (because of hotspot, gc, etc). > > Example results: > $ c:/opt/jdk16/bin/java -server t 100000000 10 foreach > N = 10 > method=foreachlen=1000000000 indexed time = 8734 > > [EMAIL PROTECTED] /cygdrive/h/tmp > $ c:/opt/jdk16/bin/java -server t 100000000 10 iter > N = 10 > method=iterlen=1000000000 indexed time = 7062 > > > Here's my test code (a modified version of yours): > > public class t { > > public static void main(String[] args) { > int I = Integer.parseInt(args[0]); // 1000000 > int N = Integer.parseInt(args[1]); // 10 > String method = args[2].intern(); // foreach or iter > > > String[] strings = new String[N]; > > for (int i = 0; i < N; i++) { > strings[i] = Integer.toString(i); > > } > > System.out.println("N = " + N); > > long len = 0; > long start = System.currentTimeMillis(); > > if (method=="foreach") > > for (int i = 0; i < I; i++) { > for (String s : strings) { > len += s.length(); > } > } > else > > for (int i = 0; i < I; i++) { > for (int j = 0; j < N; j++) { > len += strings[j].length(); > } > } > > System.out.println("method="+method + "len="+len+" indexed > time = " + (System.currentTimeMillis() - start)); > } > } > --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]