การปรับแต่งแอปพลิเคชันวิเคราะห์ทางการเงิน
ในฐานะนักพัฒนา Java สำหรับแอปพลิเคชันวิเคราะห์ทางการเงิน คุณพบว่าเมธอดสร้างรายงานตัวหนึ่งกำลังสร้าง garbage มากเกินไป และกระตุ้นให้ garbage collection ทำงานบ่อยครั้ง เมธอดนี้นำข้อมูลหลายพันจุดมาเชื่อมต่อกันเป็น string เดียว คุณจึงต้องปรับโครงสร้างโค้ดให้เป็นมิตรกับ GC มากขึ้น โดยยังคงฟังก์ชันการทำงานเดิมไว้ครบถ้วน
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
การปรับแต่งโค้ดใน Java
คำแนะนำการฝึกหัด
- สร้าง instance ใหม่ของ
StringBuilderที่มีขนาดเหมาะสม - วนซ้ำทุกค่าใน
dataPointsแล้วเพิ่มค่าที่จัดรูปแบบแล้วลงใน string builder - แปลง
StringBuilderให้เป็นStringแล้ว return ค่านั้น
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
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");
}
}