Un toolkit per la misura delle performance: Java Microbenchmark Harness

Un toolkit per la misura delle performance: Java Microbenchmark Harness

JMH è una soluzione Java per la creazione, la gestione e l’analisi di benchmark scritti in Java e in altri linguaggi rivolti alla JVM (e.g. Scala, etc.). JMH è l’acronimo di Java Microbenchmark Harness ed è un toolkit che aiuta a implementare correttamente dei microbenchmark Java.

Apache Tika: un toolkit Java per l’analisi del contenuto dei documenti digitali
Come dimensionare l’Heap Size di un’applicazione Java
PrimeFaces: una suite di componenti Open Source per Java Server Faces

JMH

JMH è una soluzione Java per la creazione, la gestione e l’analisi di benchmark scritti in Java e in altri linguaggi rivolti alla JVM (e.g. Scala, etc.). JMH è l’acronimo di Java Microbenchmark Harness ed è un toolkit che aiuta a implementare correttamente dei microbenchmark Java per la misura delle performance. JMH è sviluppato dalle stesse persone che hanno implementato la Java Virtual Machine, di conseguenza hanno una esperienza ed una conoscenza dell’architettura completa ed esauriente.

Scrivere benchmark che misurino correttamente le prestazioni di una piccola parte di un’applicazione più grande è molto difficile. Esistono molte ottimizzazioni che la JVM o l’hardware sottostante possono applicare al componente quando il benchmark esegue quel componente in isolamento. Queste ottimizzazioni potrebbero non essere applicabili quando il componente è in esecuzione come parte di un’applicazione più grande. I microbenchmarks mal implementati possono quindi far credere che le prestazioni del tuo componente siano migliori di quelle che saranno poi nella realtà. La scrittura di un microbenchmark Java corretto in genere comporta la prevenzione delle ottimizzazioni che la JVM e l’hardware potrebbero applicare durante l’esecuzione di microbenchmark che non potevano essere applicate in un sistema di produzione reale. Questo è ciò che JMH può aiutare ad ottenere.

JMH Benchmark Modes

JMH può eseguire i benchmarks in modalità differenti (benchmark mode). Il benchmark mode serve a JMH per sapere cosa misurare. I benchmark mode sono i seguenti:

ThroughputMisura il numero di operazioni per secondo, cioè il numero di volte per secondo che il metodo in esame può essere eseguito.
Average TimeMisura il tempo medio di esecuzione del benchmark
(a single execution).
Sample TimeMisura quanto tempo impiega il metodo per essere eseguito, includendo delle statistiche come la media, il massimo, il minimo, i percentili, distribuzione intorno alla media e gli istogrammi.
Single Shot TimeMisura quanto tempo impiega un singolo benchmark per essere eseguito. Questa modalità è utile per testare un benchmark con una partenza a freddo (cold start, senza warmup della JVM).
AllTutte le misure precedenti.
Modalità di test di JMH

Il benchmark mode di default è Throughput.

L’analisi con JHM prevede la conoscenza approfondita del codice sorgente.

Sono disponibili su GitHub alcuni esempi di codice di utilizzo della libreria JMH:

https://github.com/angeloonline/JMHBenchmark

COMMENTS

WORDPRESS: 0