最佳化財務分析應用程式
身為財務分析應用程式的 Java 開發者,你發現有一個產生報表的方法在產生過多垃圾,並且頻繁觸發垃圾回收。該報表會把數以千計的資料點串接成單一字串。你需要在不改變功能的前提下,將這段程式碼重構為更友善 GC 的做法。
本練習屬於課程
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");
}
}