НачатьНачать бесплатно

Оптимизация приложения для финансового анализа

Работая Java-разработчиком над приложением для финансового анализа, вы обнаружили, что один из методов генерации отчётов создаёт избыточное количество объектов и провоцирует частые сборки мусора. Метод объединяет тысячи точек данных в одну строку. Вам нужно переработать этот код так, чтобы снизить нагрузку на сборщик мусора, сохранив при этом прежнюю функциональность.

Это упражнение является частью курса

Оптимизация кода на Java

Посмотреть курс

Инструкции к упражнению

  • Создайте новый экземпляр StringBuilder нужной длины.
  • Для каждого значения из dataPoints добавьте отформатированное значение в построитель строк.
  • Преобразуйте StringBuilder в String и верните результат.

Интерактивное практическое упражнение

Попробуйте выполнить это упражнение, дополнив этот пример кода.

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");
    }
}
Редактировать и запускать код