¿Por qué los bucles omiten?

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.

Supongo que te gusta

Origin http://10.200.1.11:23101/article/api/json?id=439606&siteId=1
Recomendado
Clasificación