एक फाइनेंशियल एनालिसिस एप्लिकेशन का अनुकूलन
एक फाइनेंशियल एनालिसिस एप्लिकेशन के 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");
}
}