diff --git a/collector/src/main/java/io/prometheus/jmx/JmxCollector.java b/collector/src/main/java/io/prometheus/jmx/JmxCollector.java index 567f12f05..fbe685127 100644 --- a/collector/src/main/java/io/prometheus/jmx/JmxCollector.java +++ b/collector/src/main/java/io/prometheus/jmx/JmxCollector.java @@ -476,7 +476,12 @@ private MatchedRule defaultExport( Double value, double valueFactor, String type) { - StringBuilder name = new StringBuilder(); + // avoid having to grow the StringBuilder incrementally, by calculating its capacity up-front + int estimatedSize = domain.length() + + (beanProperties.isEmpty() ? 0 : 1 + beanProperties.values().iterator().next().length()) + + (attrKeys.stream().map(k -> k.length() + 1).reduce(0, Integer::sum)) + + attrName.length() + 1; + StringBuilder name = new StringBuilder(estimatedSize); name.append(domain); if (beanProperties.size() > 0) { name.append(SEP);