Calentamiento e iteraciones
Mida el rendimiento en régimen estable
Calentamiento e iteraciones es una lección gratuita de Java Academy en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Java Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Java Academy incluye 4 lecciones en total.
Calentamiento e iteraciones
JMH mide el rendimiento en estado estable: la velocidad que alcanza su código después de que la JVM lo haya optimizado por completo. Para ello, primero ejecuta iteraciones de calentamiento descartables y después iteraciones reales de medición. En esta lección se explica cómo ajustar ambas.
Por qué calentar la JVM
Las primeras invocaciones se ejecutan de forma interpretada y son lentas; después de que el JIT compile el método activo, las llamadas se vuelven mucho más rápidas. Incluir el arranque lento en los valores los inflaría. Las iteraciones de calentamiento ejecutan el código, pero sus tiempos se descartan.
@Warmup
@Warmup controla la fase descartable: cuántas iteraciones se ejecutan y cuánto dura cada una.
import java.util.concurrent.TimeUnit;
import org.openjdk.jmh.annotations.*;
public class Bench {
@Benchmark
@Warmup(iterations = 5, time = 1, timeUnit = TimeUnit.SECONDS)
public int work() {
return 7 * 6;
}
}@Measurement
@Measurement controla la fase real, cuyos resultados se registran. Un mayor número de iteraciones estrecha el intervalo de confianza, pero alarga la ejecución.
import java.util.concurrent.TimeUnit;
import org.openjdk.jmh.annotations.*;
public class Bench {
@Benchmark
@Measurement(iterations = 10, time = 1, timeUnit = TimeUnit.SECONDS)
public int work() {
return 7 * 6;
}
}Iteraciones frente a operaciones
Preste atención a los términos. Una iteración es una ventana cronometrada (por ejemplo, un segundo). Dentro de cada ventana, JMH llama al método del benchmark tantas veces como puede; cada llamada es una operación. La puntuación se informa por operación.
Cuántos calentamientos son suficientes
Observe la salida de cada iteración. Cuando las iteraciones sucesivas de calentamiento dejan de cambiar, el JIT se ha estabilizado. Si las primeras iteraciones de medición todavía varían, añada más calentamiento. Cinco iteraciones de calentamiento y diez de medición son un punto de partida habitual.
Las ejecuciones independientes aportan más calentamiento
Cada ejecución independiente utiliza una JVM completamente nueva, por lo que repite todo el calentamiento. Ejecutar varias ejecuciones independientes aísla los perfiles del JIT y también proporciona la variación entre JVM, que es la medida más honesta de la estabilidad.
import org.openjdk.jmh.annotations.*;
@Fork(3)
@Warmup(iterations = 5)
@Measurement(iterations = 10)
public class Bench {
@Benchmark
public double sqrt() {
return Math.sqrt(2.0);
}
}Demostrar el efecto
Este bucle de Java sencillo muestra los tiempos de cada lote. A menudo verá que los primeros lotes se ejecutan más lentamente que los posteriores, a medida que el JIT compila el método; ese es exactamente el efecto que descarta el calentamiento.
public class Main {
static long busy(int n) {
long s = 0;
for (int i = 0; i < n; i++) s += (long) Math.sqrt(i);
return s;
}
public static void main(String[] args) {
for (int batch = 0; batch < 5; batch++) {
long t = System.nanoTime();
long r = busy(2_000_000);
System.out.println("batch " + batch + ": "
+ (System.nanoTime() - t) / 1000 + " us, r=" + r);
}
}
}Basado en tiempo frente a basado en cantidad
De forma predeterminada, las iteraciones se basan en el tiempo (se ejecutan durante N segundos). Puede cambiar a una cantidad fija de operaciones con batchSize y los modos de una sola ejecución, pero lo habitual es basarse en el tiempo porque se adapta a la velocidad de la máquina.
No ajuste en exceso
Las ejecuciones muy largas consumen tiempo sin mejorar mucho la precisión una vez alcanzado el estado estable. Busque valores estables y repetibles entre las ejecuciones independientes, en lugar de maximizar el número de iteraciones. La reproducibilidad es más importante que una única cifra llamativa.
Leer la estabilización
JMH muestra la puntuación de cada iteración durante la ejecución. Un benchmark saludable muestra que las iteraciones de calentamiento convergen y que las iteraciones de medición se agrupan estrechamente en torno a la puntuación final, con un error +/- pequeño.
Comprobación rápida
Compruebe su comprensión del calentamiento y las iteraciones.
Repaso
Ha aprendido a medir el rendimiento en estado estable:
- @Warmup ejecuta iteraciones descartadas para que el JIT pueda compilar.
- @Measurement ejecuta las iteraciones registradas; un número mayor reduce el margen de error.
- Una iteración es una ventana cronometrada; cada llamada que contiene es una operación.
- Varias ejecuciones @Fork repiten el calentamiento en JVM nuevas y muestran la variación entre JVM.
- Busque puntuaciones reproducibles y estables en lugar de maximizar la duración de la ejecución.
Preguntas frecuentes
¿La lección «Calentamiento e iteraciones» es gratis?
Sí — el texto completo de «Calentamiento e iteraciones» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Java Academy, actualiza a CoddyKit PRO. El curso de Java Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Calentamiento e iteraciones»?
Mida el rendimiento en régimen estable Practicas Java Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Java Academy?
No se requiere experiencia previa. Java Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.
¿Cuánto tiempo toma la lección «Calentamiento e iteraciones»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Java Academy?
Sí. Cada lección de Java Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Por qué usar JMH
- Escritura de un benchmark
- Calentamiento e iteraciones
- Cómo evitar la eliminación de código muerto