LoslegenKostenlos loslegen

Optimierung einer Finanzanalyse-Anwendung

Als Java-Entwickler einer Finanzanalyse-Anwendung hast du festgestellt, dass eine deiner Methoden zur Berichtserstellung übermäßig viel Garbage erzeugt und häufige Garbage Collections auslöst. Der Bericht verknüpft Tausende von Datenpunkten zu einem einzigen String. Du sollst diesen Code so refaktorieren, dass er GC-freundlicher ist, bei gleichbleibender Funktionalität.

Diese Übung ist Teil des Kurses

Codeoptimierung in Java

Kurs anzeigen

Anleitung zur Übung

  • Erstelle eine neue StringBuilder-Instanz mit der benötigten Länge.
  • Füge für jeden Wert in dataPoints den formatierten Wert im StringBuilder hinzu.
  • Konvertiere den StringBuilder in einen String und gib ihn zurück.

Interaktive Übung

Vervollständige den Beispielcode, um diese Übung erfolgreich abzuschließen.

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 bearbeiten und ausführen