開始使用免費開始

最佳化財務分析應用程式

身為財務分析應用程式的 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");
    }
}
編輯並執行程式碼