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]