Optimiser une application d’analyse financière
En tant que développeur Java pour une application d’analyse financière, vous avez identifié qu’une de vos méthodes de génération de rapports crée trop d’objets temporaires et déclenche fréquemment le ramasse-miettes. Le rapport concatène des milliers de points de données en une seule chaîne. Vous devez refactoriser ce code pour qu’il soit plus favorable au GC tout en conservant la même fonctionnalité.
Cet exercice fait partie du cours
Optimiser son code en Java
Instructions
- Créez une nouvelle instance de
StringBuilderde la longueur nécessaire. - Pour chaque valeur dans
dataPoints, ajoutez la valeur formatée dans le builder de chaîne. - Convertissez le
StringBuilderenStringet retournez-le.
Exercice interactif pratique
Essayez cet exercice en complétant cet exemple de code.
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");
}
}