Tối ưu hóa một ứng dụng phân tích tài chính
Là một lập trình viên Java cho ứng dụng phân tích tài chính, bạn phát hiện một phương thức tạo báo cáo đang tạo quá nhiều rác và kích hoạt thu gom rác thường xuyên. Báo cáo này nối hàng nghìn điểm dữ liệu thành một chuỗi duy nhất. Bạn cần refactor đoạn mã này để thân thiện hơn với GC nhưng vẫn giữ nguyên chức năng.
Bài tập này là một phần của khóa học
Tối ưu hóa mã trong Java
Hướng dẫn bài tập
- Tạo một thể hiện
StringBuildermới với độ dài cần thiết. - Với mỗi giá trị trong
dataPoints, thêm giá trị đã định dạng vào string builder. - Chuyển
StringBuildersangStringvà trả về chuỗi đó.
Bài tập tương tác thực hành trực tiếp
Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.
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");
}
}