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
Instruksi 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 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");
}
}