ComenzarEmpieza gratis

Optimizar una aplicación de análisis financiero

Como desarrollador Java de una aplicación de análisis financiero, has detectado que uno de tus métodos de generación de informes crea demasiada basura y provoca recolecciones de basura frecuentes. El informe concatena miles de puntos de datos en una sola cadena. Necesitas refactorizar este código para que sea más amigable con el GC manteniendo la misma funcionalidad.

Este ejercicio forma parte del curso

Optimizing Code in Java

Ver curso

Instrucciones del ejercicio

  • Crea una nueva instancia de StringBuilder con la longitud necesaria.
  • Por cada valor en dataPoints, añade el valor formateado en el string builder.
  • Convierte el StringBuilder a String y devuélvelo.

Ejercicio interactivo práctico

Prueba este ejercicio y completa el código de muestra.

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");
    }
}
Editar y ejecutar código