CommencezCommencez gratuitement

Optimiser une application d'analyse financière

En tant que développeur Java pour une application d'analyse financière, vous avez constaté qu'une de vos méthodes de génération de rapports crée trop de déchets mémoire et déclenche fréquemment la collecte des ordures. Le rapport concatène des milliers de points de données dans une seule chaîne. Vous devez remanier ce code pour qu'il soit plus favorable au GC tout en conservant la même fonctionnalité.

Cette activité fait partie du cours

Optimiser le code en Java

Voir le cours

Instructions de l’exercice

  • Créez une nouvelle instance de StringBuilder de la longueur nécessaire.
  • Pour chaque valeur dans dataPoints, ajoutez la valeur formatée dans le générateur de chaînes.
  • Convertissez le StringBuilder en String et retournez-la.

Exercice interactif pratique

Essayez cet exercice en complétant ce code d’exemple.

public class Main {
    public static String generateReportWithoutOptimization(double[] dataPoints) {
        String report = "";
        for (double value : dataPoints) {
            report += String.format("%.2f, ", value);
        }
        return report;
    }
    
    public static String generateReportWithOptimization(double[] dataPoints) {
        // Create a new string builder
        StringBuilder report = new  ____(dataPoints.length * 8);
        for (double value : dataPoints) {
            // For every value, add the formatted value to the string builder 
            report.____(String.format("%.2f, ", value));
        }
        // Convert to string before returning
        return report.____();
    }
    
    public static void main(String[] args) {
        double[] testData = new double[10000];
        for (int i = 0; i < testData.length; i++) {
            testData[i] = Math.random() * 100;
        }
        
        long startWithoutOptimization = System.nanoTime();
        String reportWithoutOptimization = generateReportWithoutOptimization(testData);
        long endWithoutOptimization = System.nanoTime();
        
        long startWithOptimization = System.nanoTime();
        String reportWithOptimization = generateReportWithOptimization(testData);
        long endWithOptimization = System.nanoTime();
        
        System.out.println("Time taken without optimization: " + (endWithoutOptimization - startWithoutOptimization) / 1_000_000 + " ms");
        System.out.println("Time taken with optimization: " + (endWithOptimization - startWithOptimization) / 1_000_000 + " ms");
    }
}
Modifier et exécuter le code