Een financieel analyse‑applicatie optimaliseren
Als Java‑ontwikkelaar voor een financieel analyse‑applicatie heb je ontdekt dat een van je rapportagemethodes te veel garbage creëert en vaak garbage collections triggert. Het rapport voegt duizenden datapunten samen tot één string. Je moet deze code refactoren zodat die vriendelijker is voor de GC, met behoud van dezelfde functionaliteit.
Deze oefening maakt deel uit van de cursus
Code optimaliseren in Java
Oefeninstructies
- Maak een nieuwe
StringBuilder-instance aan met de benodigde lengte. - Voeg voor elke waarde in
dataPointsde geformatteerde waarde toe aan de stringbuilder. - Zet de
StringBuilderom naar eenStringen geef die terug.
Praktische interactieve oefening
Probeer deze oefening eens door deze voorbeeldcode in te vullen.
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");
}
}