Profilage du code Java : trouver les goulots d'étranglement en pratique

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Profilage du code Java : trouver les goulots d'étranglement en pratique



Chaque développeur Java rencontre tôt ou tard des problèmes de performance : l'application fonctionne lentement, consomme trop de mémoire ou se fige soudainement. Dans de telles situations, le profilage est indispensable. Dans cet article, nous allons voir comment trouver concrètement les goulots d'étranglement dans le code Java à l'aide d'outils de profilage modernes.



Qu'est-ce que le profilage et pourquoi en a-t-on besoin ?



Le profilage (profiling) est une analyse dynamique d'un programme qui permet de collecter des données sur son fonctionnement : charge CPU, utilisation de la mémoire, temps d'exécution des méthodes, nombre d'objets créés et threads. Contrairement à la journalisation, le profilage donne une image précise des "goulots d'étranglement" sans avoir à placer manuellement des minuteurs.



Les principaux types de profilage :

  • Profilage CPU — détermine quelles méthodes consomment le plus de temps processeur.
  • Profilage mémoire — identifie les fuites mémoire, la fréquence de création d'objets et le fonctionnement du ramasse-miettes (GC).
  • Profilage des threads — analyse les verrous, les deadlocks et l'état des threads.


Outils de profilage Java



Examinons trois outils très populaires qui vous aideront à trouver les goulots d'étranglement.



1. VisualVM

Outil gratuit inclus dans le JDK. Idéal pour une analyse rapide d'une application en cours d'exécution. Permet de surveiller le CPU, la mémoire, les threads et même d'effectuer des vidages de tas (heap dump).

// Lancement de VisualVM depuis la ligne de commandejvisualvm.exe


2. JProfiler

Profileur commercial avec un ensemble puissant de fonctionnalités : analyse détaillée du CPU, de la mémoire, des requêtes JDBC, JPA et SQL. Idéal pour les applications d'entreprise.



3. Java Flight Recorder (JFR) + JDK Mission Control

Outil intégré à la JVM (disponible depuis Java 11). Collecte des événements de bas niveau sans impact significatif sur les performances. Recommandé pour les environnements de production.

// Enregistrement JFR pendant 60 secondesjcmd <PID> JFR.start duration=60s filename=recording.jfr


Exemple pratique : trouver un goulot d'étranglement



Supposons que nous ayons une application qui traite une liste d'utilisateurs et génère des rapports. Elle fonctionne lentement. Écrivons un code de test simple et profilons-le avec VisualVM.



Étape 1. Préparation du code

import java.util.ArrayList;import java.util.List;

public class SlowApp { public static void main(String[] args) { List<String> users = new ArrayList<>(); for (int i = 0; i < 100000; i++) { users.add("User" + i); } processUsers(users); }

public static void processUsers(List<String> users) { for (String user : users) { String report = generateReport(user); // Simulation de sauvegarde System.out.println(report.length()); } }

public static String generateReport(String user) { StringBuilder sb = new StringBuilder(); for (int i = 0; i < 1000; i++) { sb.append(user).append(" - data ").append(i).append(""); } return sb.toString(); }}


Étape 2. Lancement du profilage

Lancez l'application et ouvrez VisualVM. Sélectionnez le processus dans le panneau de gauche, allez dans l'onglet "Profiler" et cliquez sur "CPU" pour démarrer le profilage.



Étape 3. Analyse des résultats

Après avoir arrêté le profilage, vous verrez un tableau des méthodes triées par temps passé. Dans notre exemple, la méthode generateReport sera en tête — elle consomme plus de 90% du temps CPU à cause de la concaténation de chaînes dans la boucle.



Étape 4. Optimisation

Remplaçons StringBuilder par un tampon pré-alloué :


                
                

Blogs

Book Recommendations