Optimera en applikation för finansiell analys
Som Java-utvecklare för en applikation inom finansiell analys har du identifierat att en av dina rapportgenereringsmetoder skapar alltför mycket skräp och utlöser täta garbage collections. Rapporten sammanfogar tusentals datapunkter till en enda sträng. Du behöver refaktorera koden så att den belastar GC:n mindre, utan att ändra funktionaliteten.
Den här övningen är en del av kursen
Optimera kod i Java
Övningsinstruktioner
- Skapa en ny instans av
StringBuildermed den nödvändiga längden. - Lägg till det formaterade värdet i string builder-objektet för varje värde i
dataPoints. - Konvertera
StringBuildertill enStringoch returnera den.
Interaktiv övning med praktiskt arbete
Testa den här övningen genom att slutföra den här exempelkoden.
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");
}
}