reduce memory allocations by 25% with a cache of formatted longs
This commit is contained in:
@@ -39,6 +39,17 @@ public class Plotter {
|
||||
|
||||
private static final String DEFAULT_GROUP = "<none>";
|
||||
|
||||
private static final int INT_TO_STRING_CACHE_SIZE= 1000;
|
||||
private static final String[] INT_TO_STRING;
|
||||
static {
|
||||
|
||||
INT_TO_STRING = new String[INT_TO_STRING_CACHE_SIZE];
|
||||
|
||||
for (int i = 0; i < INT_TO_STRING_CACHE_SIZE; i++){
|
||||
INT_TO_STRING[i] = String.valueOf(i);
|
||||
}
|
||||
}
|
||||
|
||||
private final PerformanceDb db;
|
||||
private final Path tmpBaseDir;
|
||||
private final Path outputDir;
|
||||
@@ -234,7 +245,7 @@ public class Plotter {
|
||||
|
||||
if (fromEpochMilli <= entry.getEpochMilli() && entry.getEpochMilli() <= toEpochMilli) {
|
||||
|
||||
final String value = String.valueOf(entry.getValue());
|
||||
final String value = longToString(entry.getValue());
|
||||
final String formattedDate;
|
||||
|
||||
if (useMillis){
|
||||
@@ -261,4 +272,13 @@ public class Plotter {
|
||||
METRICS_LOGGER.debug("wrote {} values to csv in: {}ms (ignored {} values) use millis: {}", count, (System.nanoTime() - start) / 1_000_000.0, ignoredValues, Boolean.toString(useMillis));
|
||||
return new CsvSummary(count, maxValue);
|
||||
}
|
||||
|
||||
private static String longToString(final long value){
|
||||
// using pre-generated strings reduces memory allocation by up to 25%
|
||||
|
||||
if (value < INT_TO_STRING_CACHE_SIZE){
|
||||
return INT_TO_STRING[(int) value];
|
||||
}
|
||||
return String.valueOf(value);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user