Riscaldamento e iterazioni
Misurare le prestazioni a regime
Riscaldamento e iterazioni è una lezione Java Academy gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Java Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Java Academy include 4 lezioni in totale.
Warmup e iterazioni
JMH misura le prestazioni a regime: la velocità raggiunta dal codice dopo che la JVM lo ha ottimizzato completamente. A questo scopo esegue prima alcune iterazioni di warmup di prova, quindi le iterazioni reali di misurazione. In questa lezione verrà illustrato come configurare entrambe.
Perché eseguire il warmup
Le prime invocazioni vengono interpretate e sono lente; dopo che il JIT compila il metodo molto utilizzato, le chiamate diventano molto più rapide. Includere il lento avvio nei valori li gonfierebbe. Le iterazioni di warmup eseguono il codice, ma i relativi tempi vengono scartati.
@Warmup
@Warmup controlla la fase di prova: il numero di iterazioni e la durata di ciascuna.
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 controlla la fase reale, i cui risultati vengono registrati. Un numero maggiore di iterazioni restringe l'intervallo di confidenza, ma allunga l'esecuzione.
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;
}
}Iterazioni e operazioni
Presti attenzione ai termini. Un' iterazione è una finestra temporizzata, per esempio di un secondo. All'interno di ogni finestra JMH chiama il metodo benchmark tutte le volte possibili; ogni chiamata è un'operazione. Il punteggio viene riportato per operazione.
Quanti warmup sono sufficienti
Osservi l'output per iterazione. Quando le iterazioni successive di warmup smettono di cambiare, il JIT si è stabilizzato. Se le prime iterazioni di misurazione mostrano ancora variazioni, aggiunga altro warmup. Cinque iterazioni di warmup e dieci di misurazione sono un punto di partenza comune.
I fork aggiungono altro warmup
Ogni fork utilizza una JVM completamente nuova, quindi ripete l'intero warmup. L'esecuzione di più fork isola i profili JIT e fornisce anche la varianza tra JVM, che è la misura più attendibile della stabilità.
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);
}
}Dimostrare l'effetto
Questo semplice ciclo Java stampa i tempi di ogni gruppo di operazioni. Spesso i primi gruppi risultano più lenti di quelli successivi, mentre il JIT compila il metodo: è esattamente l'effetto che il warmup scarta.
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);
}
}
}Basato sul tempo e basato sul conteggio
Per impostazione predefinita, le iterazioni sono basate sul tempo (durano N secondi). È possibile passare a un numero fisso di operazioni con batchSize e le modalità single-shot, ma l'approccio basato sul tempo è quello più comune perché si adatta alla velocità della macchina.
Non esageri con l'ottimizzazione
Una durata eccessiva delle esecuzioni richiede tempo senza migliorare molto la precisione una volta raggiunto il regime. Punti a valori stabili e ripetibili tra i fork, invece di massimizzare il numero di iterazioni. La riproducibilità è più importante di un singolo valore impressionante.
Interpretare la stabilizzazione
JMH stampa il punteggio di ogni iterazione durante l'esecuzione. Un benchmark in buone condizioni mostra iterazioni di warmup convergenti e iterazioni di misurazione raggruppate vicino al punteggio finale, con un errore +/- ridotto.
Verifica rapida
Verifichi la Sua comprensione di warmup e iterazioni.
Riepilogo
Ha imparato a misurare le prestazioni a regime:
- @Warmup esegue iterazioni scartate, consentendo al JIT di compilare il codice.
- @Measurement esegue le iterazioni registrate; un numero maggiore riduce il margine di errore.
- Un'iterazione è una finestra temporizzata; ogni chiamata al suo interno è un'operazione.
- Più annotazioni @Fork ripetono il warmup in JVM nuove e mostrano la varianza tra JVM.
- Punti a punteggi riproducibili e stabili, invece di massimizzare la durata dell'esecuzione.
Impara Java con un tutor IA — gratis
Scrivi ed esegui vero codice nel tuo browser, ricevi aiuto istantaneo da un tutor IA disponibile 24/7, e riprendi da dove hai lasciato sul web o nell'app.
- Corsi
- 104
- Lezioni
- 374
Domande Frequenti
La lezione «Riscaldamento e iterazioni» è gratuita?
Sì — il testo completo di «Riscaldamento e iterazioni» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Java Academy, passa a CoddyKit PRO. Il corso Java Academy include 4 lezioni in totale.
Cosa imparerò in «Riscaldamento e iterazioni»?
Misurare le prestazioni a regime Eserciti Java Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Java Academy?
Non è richiesta alcuna esperienza precedente. Java Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.
Quanto tempo richiede la lezione «Riscaldamento e iterazioni»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Java Academy?
Sì. Ogni lezione Java Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Perché usare JMH
- Scrivere un benchmark
- Riscaldamento e iterazioni
- Evitare l'eliminazione del codice morto