Comece agoraComece grátis

Otimização de um aplicativo de análise financeira

Como desenvolvedor Java de um aplicativo de análise financeira, você identificou que um dos métodos de geração de relatórios está criando muito lixo e acionando coletas de lixo frequentes. O relatório concatena milhares de pontos de dados em uma única string. Você precisa refatorar esse código para ser mais amigável ao GC, mantendo a mesma funcionalidade.

Este exercicio faz parte do curso

Otimização de Código em Java

Ver curso

Instruções do exercicio

  • Crie uma nova instância de StringBuilder com o tamanho necessário.
  • Para cada valor em dataPoints, adicione o valor formatado no string builder.
  • Converta o StringBuilder em String e retorne-o.

exercicio interativo prático

Tente este exercicio completando este código de exemplo.

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 e Executar Código