while statement loop for español enhanced array java for-loop

statement - java for arraylist



Un bucle con un cuerpo vacío en Java (4)

No sé si ha cambiado, no he usado Java por 2 años, pero parece que no.

http://www.herongyang.com/JVM/Benchmark-Int-Empty-Loop-16-Nanosecond.html http://www.herongyang.com/JVM/Benchmark-Long-Empty-Loop-25-Nanosecond.html

Esta prueba también confirma que el compilador de códigos de bytes Java "javac" no está haciendo ninguna optimización para reemplazar el bucle vacío con "i = pasos", que es el efecto neto del bucle.

Durante la reparación de errores en un proyecto muy antiguo que he enfrentado con un método extraño, se ve así:

void waiter() { for (int i = 0; i < 20000; i++) ; }

¿Causa la interrupción de algún tiempo o será omitido por la optimización de JVM?


Puede ser optimizado, puede que no. Depende del nivel de optimización en el compilador.

La variable i tiene un alcance para el ciclo, por lo que no estará disponible después. El compilador puede identificar estáticamente que el ciclo se ejecutará una cantidad conocida de veces. También sabe que la declaración vacía se repite muchas veces. A continuación, puede transformar un número de instrucciones vacías en una declaración vacía, o ninguna declaración en absoluto. Esto tiene el efecto de eliminar el código por completo del árbol de sintaxis abstracta.

Esto sucederá en algunos ajustes de optimización y compiladores, y no en otros.


Sí, se optimizará. He intentado: D


Se optimizará después de algunas ejecuciones por parte de JIT. La JVM, en la primera ejecución, necesita verificar si el valor si i que se está incrementando no se está utilizando en ninguna parte.

Verifique este artículo también:

Java: ¿cuánto tiempo usa un ciclo vacío?