JMH (Java Microbenchmark Harness): Guía completa de micro-benchmarking en Java
JMH (Java Microbenchmark Harness) es una biblioteca para crear, ejecutar y analizar micro-benchmarks (pruebas de rendimiento a pequeña escala) en el lenguaje Java. Desarrollada por el equipo de JVM Performance (incluyendo a expertos como Alexey Shipilëv), JMH es el estándar de facto para medir el rendimiento de fragmentos pequeños de código en el ecosistema Java.
1. ¿Qué es y para qué sirve?
Escribir una prueba de rendimiento correcta en Java no es una tarea trivial. El compilador JIT, el recolector de basura, las optimizaciones a nivel de CPU (caché, ejecución especulativa) e incluso el orden de ejecución de las operaciones pueden distorsionar completamente los resultados. Un simple bucle for dentro de main a menudo provoca que el compilador JIT elimine el código bajo prueba por considerarlo "muerto" (Dead Code Elimination), y terminas midiendo la velocidad de un bucle vacío.
JMH resuelve estos problemas automáticamente. Gestiona el "calentamiento" (Warmup) del código para que el compilador JIT se estabilice, previene la optimización de "código muerto", maneja los forks (Forks) para aislar la JVM, y proporciona resultados estadísticamente significativos (media, percentiles, margen de error).
¿Para qué le sirve a un desarrollador? Para tomar decisiones informadas al elegir un algoritmo, una estructura de datos, un método de serialización, optimizar una sección crítica de código o comparar diferentes implementaciones (por ejemplo, StringBuilder vs String.concat). Sin JMH, corres el riesgo de "optimizar" algo que en realidad no es un cuello de botella, u obtener resultados que no se reproducen en un entorno de producción real.
2. Instalación
JMH es una biblioteca para Java, por lo que no se instala con pip o npm. La forma más cómoda es usar Maven o Gradle.
Opción 1: Maven (recomendado para empezar rápido)
Crea un nuevo proyecto Maven y añade lo siguiente a tu pom.xml:
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.ejemplo</groupId>
<artifactId>ejemplo-jmh</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jmh</packaging>
<dependencies>
<dependency>
<groupId>org.openjdk.jmh</groupId>
<artifactId>jmh-core</artifactId>
<version>1.37</version>
</dependency>
<dependency>
<groupId>org.openjdk.jmh</groupId>
<artifactId>jmh-generator-annprocess</artifactId>
<version>1.37</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>17</source>
<target>17</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
Opción 2: Gradle
plugins {
id 'java'
id 'me.champeau.jmh' version '0.7.2'
}
dependencies {
implementation 'org.openjdk.jmh:jmh-core:1.37'
annotationProcessor 'org.openjdk.jmh:jmh-generator-annprocess:1.37'
}
jmh {
jmhVersion = '1.37'
}
Opción 3: Descargar el JAR (no recomendado)
Puedes descargar el fat-jar desde GitHub, pero es menos práctico para gestionar dependencias.
3. Inicio rápido — ejemplo mínimo funcional
También en la biblioteca
PM2: Monitoreo y gestión de aplicaciones JavaScript
Internacionalización (i18n) en PHP: biblioteca gettext y enfoques modernos
Aprendizaje automático en PHP: revisión de bibliotecas para integración de ML
Validación de datos en PHP con la librería Respect\\Validation