Mulai sekarangMulai gratis

Mengoptimalkan aplikasi analisis keuangan

Sebagai pengembang Java untuk aplikasi analisis keuangan, Anda mengidentifikasi bahwa salah satu metode pembuatan laporan menghasilkan sampah memori berlebihan dan memicu pengumpulan sampah yang sering. Laporan tersebut menggabungkan ribuan titik data menjadi satu string. Anda perlu merefaktor kode ini agar lebih ramah terhadap GC sambil mempertahankan fungsionalitas yang sama.

Latihan ini merupakan bagian dari kursus

Optimasi Kode di Java

Lihat Kursus

Instruksi latihan

  • Buat instance StringBuilder baru dengan panjang yang diperlukan.
  • Untuk setiap nilai dalam dataPoints, tambahkan nilai yang telah diformat ke dalam string builder.
  • Konversikan StringBuilder menjadi String dan kembalikan nilainya.

Latihan interaktif langsung praktik

Cobalah latihan ini dengan melengkapi kode contoh ini.

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");
    }
}
Edit dan Jalankan Kode