shubham:
long start = System.currentTimeMillis();
long m = 0;
System.out.println("Going into the loop");
for (int i = 0; i < 10000000; i++) {
for (int j = 0; j < 1000; j++) {
if (i % 2 == 0 && j % 3 == 0) {
m = i + j;
}
}
}
System.out.println("Out of the loop");
long end = System.currentTimeMillis();
System.out.println("Time : " + (end - start));
System.out.println("m : " + m);
Cuando ejecuto el código anterior, entonces el valor de "m" evaluado a 10.000.997 y el tiempo de ejecución viene a ser 13.321.
Going into the loop
Out of the loop
Time : 13321
m : 10000997
Pero cuando comento la última declaración SOP que imprime el valor de "m", entonces el tiempo de funcionamiento viene a ser alrededor de 7.
Going into the loop
Out of the loop
Time : 7
Entonces, ¿por qué pasa ésto? Son los bucles para ser omitidos?
Nicktar:
El compilador optimiza su código y se da cuenta de que la variable m es, de hecho, una tienda de muertos que se puede quitar. Entonces se da cuenta de que el caso no hace nada en absoluto (después de retirar m) y se elimina también. Lo mismo sucede para el bucle ineer y luego el bucle exterior.