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 adalah bagian dari kursus
Optimasi Kode di Java
Petunjuk latihan
- Buat instance
StringBuilderbaru dengan panjang yang diperlukan. - Untuk setiap nilai dalam
dataPoints, tambahkan nilai yang telah diformat ke dalam string builder. - Konversikan
StringBuildermenjadiStringdan kembalikan nilainya.
Latihan interaktif praktis
Cobalah latihan ini dengan menyelesaikan kode contoh berikut.
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");
}
}