0Pricing
Java Academy · Leçon

Préchauffage et itérations

Mesurez les performances en régime stable

Préchauffage et itérations est une leçon Java Academy gratuite sur CoddyKit. Ceci est la leçon 3 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Java Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Java Academy comprend 4 leçons au total.

Échauffement et itérations

JMH mesure les performances en régime stable : la vitesse atteinte par votre code une fois que la JVM l’a entièrement optimisé. Pour cela, il exécute d’abord des itérations d’échauffement temporaires, puis de vraies itérations de mesure. Cette leçon explique comment régler ces deux paramètres.

Pourquoi effectuer un échauffement

Les premiers appels sont interprétés et lents ; après la compilation de la méthode très sollicitée par le compilateur à la volée, les appels deviennent beaucoup plus rapides. Inclure le démarrage lent dans vos nombres les augmenterait artificiellement. Les itérations d’échauffement exécutent le code, mais leurs durées sont supprimées.

@Warmup

@Warmup contrôle la phase temporaire : le nombre d’itérations et la durée de chacune.

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 contrôle la phase réelle, enregistrée. Un plus grand nombre d’itérations resserre l’intervalle de confiance, mais allonge l’exécution.

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;
    }
}

Itérations et opérations

Soyez attentif aux termes employés. Une itération est une fenêtre chronométrée (par exemple, une seconde). Dans chaque fenêtre, JMH appelle la méthode d’évaluation comparative autant de fois que possible ; chaque appel est une opération. Le score est indiqué par opération.

Combien d’échauffements sont suffisants

Observez la sortie pour chaque itération. Lorsque des itérations d’échauffement successives cessent de changer, le compilateur à la volée s’est stabilisé. Si les premières itérations de mesure varient encore, ajoutez davantage d’échauffement. Cinq itérations d’échauffement et dix itérations de mesure constituent un point de départ courant.

Les exécutions séparées ajoutent de l’échauffement

Chaque exécution séparée utilise une JVM entièrement nouvelle et répète donc l’échauffement complet. Plusieurs exécutions séparées isolent les profils du compilateur à la volée et vous donnent également la variance entre les JVM, ce qui constitue la mesure la plus honnête de la 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);
    }
}

Démontrer l’effet

Cette simple boucle Java affiche les durées pour chaque lot. Vous constaterez souvent que les premiers lots s’exécutent plus lentement que les suivants, tandis que le compilateur à la volée compile la méthode : c’est exactement l’effet que l’échauffement écarte.

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);
        }
    }
}

Basé sur le temps ou sur le nombre

Par défaut, les itérations sont basées sur le temps (elles s’exécutent pendant N secondes). Vous pouvez passer à un nombre fixe d’opérations avec batchSize et les modes à exécution unique, mais le mode basé sur le temps est la norme, car il s’adapte à la vitesse de la machine.

N’optimisez pas à l’excès

Les exécutions très longues prennent du temps sans beaucoup améliorer la précision une fois le régime stable atteint. Visez des résultats stables et reproductibles entre les exécutions séparées plutôt que de maximiser le nombre d’itérations. La reproductibilité vaut mieux qu’un chiffre unique impressionnant.

Observer la stabilisation

JMH affiche le score de chaque itération pendant l’exécution. Une évaluation comparative fiable montre des itérations d’échauffement qui convergent et des itérations de mesure regroupées étroitement autour du score final, avec une petite erreur +/-.

Vérification rapide

Vérifiez votre compréhension de l’échauffement et des itérations.

Récapitulatif

Vous avez appris à mesurer les performances en régime stable :

  • @Warmup exécute des itérations supprimées des résultats afin que le compilateur à la volée puisse compiler le code.
  • @Measurement exécute les itérations enregistrées ; en augmenter le nombre resserre la marge d’erreur.
  • Une itération est une fenêtre chronométrée ; chaque appel à l’intérieur est une opération.
  • Plusieurs exécutions @Fork répètent l’échauffement dans de nouvelles JVM et révèlent la variance entre les JVM.
  • Visez des scores reproductibles et stables plutôt qu’une durée d’exécution maximale.

Questions Fréquemment Posées

La leçon « Préchauffage et itérations » est-elle gratuite ?

Oui — le texte complet de « Préchauffage et itérations » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Java Academy, passe à CoddyKit PRO. Le cours Java Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Préchauffage et itérations » ?

Mesurez les performances en régime stable Tu pratiques Java Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer Java Academy ?

Aucune expérience préalable n'est requise. Java Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 3 sur 4.

Combien de temps prend la leçon « Préchauffage et itérations » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon Java Academy ?

Oui. Chaque leçon Java Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Pourquoi JMH
  2. Écrire une référence
  3. Préchauffage et itérations
  4. Éviter la suppression du code inutile
← Retour à Java Academy