Skip to content

Commit b49b8a9

Browse files
pkubowiczbrian-brazil
authored andcommitted
Improve array allocation
- precompute array size when it's obvious - avoids re-allocating - use singletonList() when the array can be immutable - replace some empty arrays with emptyList()
1 parent 5b4ddb8 commit b49b8a9

14 files changed

Lines changed: 32 additions & 45 deletions

File tree

simpleclient/src/main/java/io/prometheus/client/Collector.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ public interface Describable {
144144
* describe, or if that's not practical have describe return an empty
145145
* list.
146146
*/
147-
public List<MetricFamilySamples> describe();
147+
List<MetricFamilySamples> describe();
148148
}
149149

150150

simpleclient/src/main/java/io/prometheus/client/CollectorRegistry.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ public void clear() {
8787
*/
8888
private Set<Collector> collectors() {
8989
synchronized (collectorsToNames) {
90-
return new HashSet(collectorsToNames.keySet());
90+
return new HashSet<Collector>(collectorsToNames.keySet());
9191
}
9292
}
9393

simpleclient/src/main/java/io/prometheus/client/Counter.java

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package io.prometheus.client;
22

33
import java.util.ArrayList;
4+
import java.util.Collections;
45
import java.util.List;
56
import java.util.Map;
67

@@ -155,21 +156,15 @@ public double get() {
155156

156157
@Override
157158
public List<MetricFamilySamples> collect() {
158-
List<MetricFamilySamples.Sample> samples = new ArrayList<MetricFamilySamples.Sample>();
159+
List<MetricFamilySamples.Sample> samples = new ArrayList<MetricFamilySamples.Sample>(children.size());
159160
for(Map.Entry<List<String>, Child> c: children.entrySet()) {
160161
samples.add(new MetricFamilySamples.Sample(fullname, labelNames, c.getKey(), c.getValue().get()));
161162
}
162-
MetricFamilySamples mfs = new MetricFamilySamples(fullname, Type.COUNTER, help, samples);
163-
164-
List<MetricFamilySamples> mfsList = new ArrayList<MetricFamilySamples>();
165-
mfsList.add(mfs);
166-
return mfsList;
163+
return familySamplesList(Type.COUNTER, samples);
167164
}
168165

169166
@Override
170167
public List<MetricFamilySamples> describe() {
171-
List<MetricFamilySamples> mfsList = new ArrayList<MetricFamilySamples>();
172-
mfsList.add(new CounterMetricFamily(fullname, help, labelNames));
173-
return mfsList;
168+
return Collections.<MetricFamilySamples>singletonList(new CounterMetricFamily(fullname, help, labelNames));
174169
}
175170
}

simpleclient/src/main/java/io/prometheus/client/CounterMetricFamily.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
package io.prometheus.client;
22

33
import java.util.ArrayList;
4-
import java.util.List;
54
import java.util.Collections;
5+
import java.util.List;
66

77
/**
88
* Counter metric family, for custom collectors and exporters.
@@ -30,7 +30,7 @@
3030
*/
3131
public class CounterMetricFamily extends Collector.MetricFamilySamples {
3232

33-
private List<String> labelNames;
33+
private final List<String> labelNames;
3434

3535
public CounterMetricFamily(String name, String help, double value) {
3636
super(name, Collector.Type.COUNTER, help, new ArrayList<Sample>());

simpleclient/src/main/java/io/prometheus/client/Gauge.java

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import java.io.Closeable;
44
import java.io.IOException;
55
import java.util.ArrayList;
6+
import java.util.Collections;
67
import java.util.List;
78
import java.util.Map;
89

@@ -291,22 +292,16 @@ public double get() {
291292

292293
@Override
293294
public List<MetricFamilySamples> collect() {
294-
List<MetricFamilySamples.Sample> samples = new ArrayList<MetricFamilySamples.Sample>();
295+
List<MetricFamilySamples.Sample> samples = new ArrayList<MetricFamilySamples.Sample>(children.size());
295296
for(Map.Entry<List<String>, Child> c: children.entrySet()) {
296297
samples.add(new MetricFamilySamples.Sample(fullname, labelNames, c.getKey(), c.getValue().get()));
297298
}
298-
MetricFamilySamples mfs = new MetricFamilySamples(fullname, Type.GAUGE, help, samples);
299-
300-
List<MetricFamilySamples> mfsList = new ArrayList<MetricFamilySamples>();
301-
mfsList.add(mfs);
302-
return mfsList;
299+
return familySamplesList(Type.GAUGE, samples);
303300
}
304301

305302
@Override
306303
public List<MetricFamilySamples> describe() {
307-
List<MetricFamilySamples> mfsList = new ArrayList<MetricFamilySamples>();
308-
mfsList.add(new GaugeMetricFamily(fullname, help, labelNames));
309-
return mfsList;
304+
return Collections.<MetricFamilySamples>singletonList(new GaugeMetricFamily(fullname, help, labelNames));
310305
}
311306

312307
static class TimeProvider {

simpleclient/src/main/java/io/prometheus/client/GaugeMetricFamily.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
package io.prometheus.client;
22

33
import java.util.ArrayList;
4-
import java.util.List;
54
import java.util.Collections;
5+
import java.util.List;
66

77
/**
88
* Gauge metric family, for custom collectors and exporters.
@@ -30,7 +30,7 @@
3030
*/
3131
public class GaugeMetricFamily extends Collector.MetricFamilySamples {
3232

33-
private List<String> labelNames;
33+
private final List<String> labelNames;
3434

3535
public GaugeMetricFamily(String name, String help, double value) {
3636
super(name, Collector.Type.GAUGE, help, new ArrayList<Sample>());

simpleclient/src/main/java/io/prometheus/client/Histogram.java

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import java.io.Closeable;
44
import java.io.IOException;
55
import java.util.ArrayList;
6+
import java.util.Collections;
67
import java.util.List;
78
import java.util.Map;
89

@@ -309,17 +310,13 @@ public List<MetricFamilySamples> collect() {
309310
samples.add(new MetricFamilySamples.Sample(fullname + "_sum", labelNames, c.getKey(), v.sum));
310311
}
311312

312-
MetricFamilySamples mfs = new MetricFamilySamples(fullname, Type.HISTOGRAM, help, samples);
313-
List<MetricFamilySamples> mfsList = new ArrayList<MetricFamilySamples>();
314-
mfsList.add(mfs);
315-
return mfsList;
313+
return familySamplesList(Type.HISTOGRAM, samples);
316314
}
317315

318316
@Override
319317
public List<MetricFamilySamples> describe() {
320-
List<MetricFamilySamples> mfsList = new ArrayList<MetricFamilySamples>();
321-
mfsList.add(new MetricFamilySamples(fullname, Type.HISTOGRAM, help, new ArrayList<MetricFamilySamples.Sample>()));
322-
return mfsList;
318+
return Collections.singletonList(
319+
new MetricFamilySamples(fullname, Type.HISTOGRAM, help, Collections.<MetricFamilySamples.Sample>emptyList()));
323320
}
324321

325322
double[] getBuckets() {

simpleclient/src/main/java/io/prometheus/client/SimpleCollector.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package io.prometheus.client;
22

3+
import java.util.ArrayList;
34
import java.util.concurrent.ConcurrentHashMap;
45
import java.util.concurrent.ConcurrentMap;
56
import java.util.Arrays;
@@ -142,6 +143,13 @@ public <T extends Collector> T setChild(Child child, String... labelValues) {
142143
*/
143144
protected abstract Child newChild();
144145

146+
protected List<MetricFamilySamples> familySamplesList(Collector.Type type, List<MetricFamilySamples.Sample> samples) {
147+
MetricFamilySamples mfs = new MetricFamilySamples(fullname, type, help, samples);
148+
List<MetricFamilySamples> mfsList = new ArrayList<MetricFamilySamples>(1);
149+
mfsList.add(mfs);
150+
return mfsList;
151+
}
152+
145153
protected SimpleCollector(Builder b) {
146154
if (b.name.isEmpty()) throw new IllegalStateException("Name hasn't been set.");
147155
String name = b.name;

simpleclient/src/main/java/io/prometheus/client/Summary.java

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ public class Summary extends SimpleCollector<Summary.Child> implements Counter.D
9494

9595
public static class Builder extends SimpleCollector.Builder<Builder, Summary> {
9696

97-
private List<Quantile> quantiles = new ArrayList<Quantile>();
97+
private final List<Quantile> quantiles = new ArrayList<Quantile>();
9898
private long maxAgeSeconds = TimeUnit.MINUTES.toSeconds(10);
9999
private int ageBuckets = 5;
100100

@@ -333,17 +333,12 @@ public List<MetricFamilySamples> collect() {
333333
samples.add(new MetricFamilySamples.Sample(fullname + "_sum", labelNames, c.getKey(), v.sum));
334334
}
335335

336-
MetricFamilySamples mfs = new MetricFamilySamples(fullname, Type.SUMMARY, help, samples);
337-
List<MetricFamilySamples> mfsList = new ArrayList<MetricFamilySamples>();
338-
mfsList.add(mfs);
339-
return mfsList;
336+
return familySamplesList(Type.SUMMARY, samples);
340337
}
341338

342339
@Override
343340
public List<MetricFamilySamples> describe() {
344-
List<MetricFamilySamples> mfsList = new ArrayList<MetricFamilySamples>();
345-
mfsList.add(new SummaryMetricFamily(fullname, help, labelNames));
346-
return mfsList;
341+
return Collections.<MetricFamilySamples>singletonList(new SummaryMetricFamily(fullname, help, labelNames));
347342
}
348343

349344
}

simpleclient/src/main/java/io/prometheus/client/SummaryMetricFamily.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,8 @@
3030
*/
3131
public class SummaryMetricFamily extends Collector.MetricFamilySamples {
3232

33-
private List<String> labelNames;
34-
private List<Double> quantiles;
33+
private final List<String> labelNames;
34+
private final List<Double> quantiles;
3535

3636
public SummaryMetricFamily(String name, String help, double count, double sum) {
3737
super(name, Collector.Type.SUMMARY, help, new ArrayList<Sample>());

0 commit comments

Comments
 (0)