Aan de slagGa gratis aan de slag

Een financieel analyse‑applicatie optimaliseren

Als Java‑ontwikkelaar voor een financieel analyse‑applicatie heb je ontdekt dat een van je rapportage­methodes 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

Cursus bekijken

Oefeninstructies

  • Maak een nieuwe StringBuilder-instance aan met de benodigde lengte.
  • Voeg voor elke waarde in dataPoints de geformatteerde waarde toe aan de stringbuilder.
  • Zet de StringBuilder om naar een String en 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");
    }
}
Code bewerken en uitvoeren