G
Guest
Gast
Gegeben ist folgender Code:
Unter Linux Kernel 2.6 in der Jave SE build 1.6.0_03-b05 passiert nun folgendes:
Im Original oben dauert ein Durchlauf:
./java loopteset
Dauert: 91 Sekunden
Entferne ich die äussere For-Schleife, erhalte ich folgende Werte:
./java loopteset
Dauert: 4 Sekunden
Als Zeit wird ja nur die Zeit der Schleife(n) gezählt, d.h. der Overhead beim Laden der VM wird nicht mitgezählt.
Wie kann es bitteschön sein, dass das 10fache Durchlaufen der 1-Milliarde-Schleife
91 Sekunden dauert und das 1fache Durchlaufen 4 Sekunden?
91 Sekunden zu 4 Sekunden verhält sich nicht wie 10 zu 1.
Wenn, dann müsste doch das Programm mit den 10 Iterationen immer schneller sein als das mit nur einer, da sich hier etwaige Start-Effekte verlieren (parallel gestartete Verwaltungs-Threads in der VM die anfangs noch arbeiten und anfangs wertvolle CPU-Zeit verbrauchen).
Woran kann das liegen?
Vielen Dank!
Thomas
Code:
public class looptest
{
public static void main (String argv[])
{
int i, j, k , l, m;
long t;
System.out.println("Start!");
t=System.currentTimeMillis();
j=0; k=0; l=0;
for(m=0;m<10;m++) //DER KNACKPUNKT
for(i=0;i<1000000000;i++)
{
j++;
k+=l*j+i;
k++;
}
t=System.currentTimeMillis()-t;
System.out.println("Hello World: "+j+" time="+t+"Code: "+k);
}
}
Unter Linux Kernel 2.6 in der Jave SE build 1.6.0_03-b05 passiert nun folgendes:
Im Original oben dauert ein Durchlauf:
./java loopteset
Dauert: 91 Sekunden
Entferne ich die äussere For-Schleife, erhalte ich folgende Werte:
./java loopteset
Dauert: 4 Sekunden
Als Zeit wird ja nur die Zeit der Schleife(n) gezählt, d.h. der Overhead beim Laden der VM wird nicht mitgezählt.
Wie kann es bitteschön sein, dass das 10fache Durchlaufen der 1-Milliarde-Schleife
91 Sekunden dauert und das 1fache Durchlaufen 4 Sekunden?
91 Sekunden zu 4 Sekunden verhält sich nicht wie 10 zu 1.
Wenn, dann müsste doch das Programm mit den 10 Iterationen immer schneller sein als das mit nur einer, da sich hier etwaige Start-Effekte verlieren (parallel gestartete Verwaltungs-Threads in der VM die anfangs noch arbeiten und anfangs wertvolle CPU-Zeit verbrauchen).
Woran kann das liegen?
Vielen Dank!
Thomas