Skip to content

Commit

Permalink
Improve array allocation
Browse files Browse the repository at this point in the history
- precompute array size when it's obvious - avoids re-allocating
- use singletonList() when the array can be immutable
- replace some empty arrays with emptyList()
  • Loading branch information
pkubowicz authored and brian-brazil committed Feb 21, 2017
1 parent 5b4ddb8 commit b49b8a9
Show file tree
Hide file tree
Showing 14 changed files with 32 additions and 45 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,7 @@ public interface Describable {
* describe, or if that's not practical have describe return an empty
* list.
*/
public List<MetricFamilySamples> describe();
List<MetricFamilySamples> describe();
}


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ public void clear() {
*/
private Set<Collector> collectors() {
synchronized (collectorsToNames) {
return new HashSet(collectorsToNames.keySet());
return new HashSet<Collector>(collectorsToNames.keySet());
}
}

Expand Down
13 changes: 4 additions & 9 deletions simpleclient/src/main/java/io/prometheus/client/Counter.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package io.prometheus.client;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;

Expand Down Expand Up @@ -155,21 +156,15 @@ public double get() {

@Override
public List<MetricFamilySamples> collect() {
List<MetricFamilySamples.Sample> samples = new ArrayList<MetricFamilySamples.Sample>();
List<MetricFamilySamples.Sample> samples = new ArrayList<MetricFamilySamples.Sample>(children.size());
for(Map.Entry<List<String>, Child> c: children.entrySet()) {
samples.add(new MetricFamilySamples.Sample(fullname, labelNames, c.getKey(), c.getValue().get()));
}
MetricFamilySamples mfs = new MetricFamilySamples(fullname, Type.COUNTER, help, samples);

List<MetricFamilySamples> mfsList = new ArrayList<MetricFamilySamples>();
mfsList.add(mfs);
return mfsList;
return familySamplesList(Type.COUNTER, samples);
}

@Override
public List<MetricFamilySamples> describe() {
List<MetricFamilySamples> mfsList = new ArrayList<MetricFamilySamples>();
mfsList.add(new CounterMetricFamily(fullname, help, labelNames));
return mfsList;
return Collections.<MetricFamilySamples>singletonList(new CounterMetricFamily(fullname, help, labelNames));
}
}
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package io.prometheus.client;

import java.util.ArrayList;
import java.util.List;
import java.util.Collections;
import java.util.List;

/**
* Counter metric family, for custom collectors and exporters.
Expand Down Expand Up @@ -30,7 +30,7 @@
*/
public class CounterMetricFamily extends Collector.MetricFamilySamples {

private List<String> labelNames;
private final List<String> labelNames;

public CounterMetricFamily(String name, String help, double value) {
super(name, Collector.Type.COUNTER, help, new ArrayList<Sample>());
Expand Down
13 changes: 4 additions & 9 deletions simpleclient/src/main/java/io/prometheus/client/Gauge.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import java.io.Closeable;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;

Expand Down Expand Up @@ -291,22 +292,16 @@ public double get() {

@Override
public List<MetricFamilySamples> collect() {
List<MetricFamilySamples.Sample> samples = new ArrayList<MetricFamilySamples.Sample>();
List<MetricFamilySamples.Sample> samples = new ArrayList<MetricFamilySamples.Sample>(children.size());
for(Map.Entry<List<String>, Child> c: children.entrySet()) {
samples.add(new MetricFamilySamples.Sample(fullname, labelNames, c.getKey(), c.getValue().get()));
}
MetricFamilySamples mfs = new MetricFamilySamples(fullname, Type.GAUGE, help, samples);

List<MetricFamilySamples> mfsList = new ArrayList<MetricFamilySamples>();
mfsList.add(mfs);
return mfsList;
return familySamplesList(Type.GAUGE, samples);
}

@Override
public List<MetricFamilySamples> describe() {
List<MetricFamilySamples> mfsList = new ArrayList<MetricFamilySamples>();
mfsList.add(new GaugeMetricFamily(fullname, help, labelNames));
return mfsList;
return Collections.<MetricFamilySamples>singletonList(new GaugeMetricFamily(fullname, help, labelNames));
}

static class TimeProvider {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package io.prometheus.client;

import java.util.ArrayList;
import java.util.List;
import java.util.Collections;
import java.util.List;

/**
* Gauge metric family, for custom collectors and exporters.
Expand Down Expand Up @@ -30,7 +30,7 @@
*/
public class GaugeMetricFamily extends Collector.MetricFamilySamples {

private List<String> labelNames;
private final List<String> labelNames;

public GaugeMetricFamily(String name, String help, double value) {
super(name, Collector.Type.GAUGE, help, new ArrayList<Sample>());
Expand Down
11 changes: 4 additions & 7 deletions simpleclient/src/main/java/io/prometheus/client/Histogram.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import java.io.Closeable;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;

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

MetricFamilySamples mfs = new MetricFamilySamples(fullname, Type.HISTOGRAM, help, samples);
List<MetricFamilySamples> mfsList = new ArrayList<MetricFamilySamples>();
mfsList.add(mfs);
return mfsList;
return familySamplesList(Type.HISTOGRAM, samples);
}

@Override
public List<MetricFamilySamples> describe() {
List<MetricFamilySamples> mfsList = new ArrayList<MetricFamilySamples>();
mfsList.add(new MetricFamilySamples(fullname, Type.HISTOGRAM, help, new ArrayList<MetricFamilySamples.Sample>()));
return mfsList;
return Collections.singletonList(
new MetricFamilySamples(fullname, Type.HISTOGRAM, help, Collections.<MetricFamilySamples.Sample>emptyList()));
}

double[] getBuckets() {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package io.prometheus.client;

import java.util.ArrayList;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
import java.util.Arrays;
Expand Down Expand Up @@ -142,6 +143,13 @@ public <T extends Collector> T setChild(Child child, String... labelValues) {
*/
protected abstract Child newChild();

protected List<MetricFamilySamples> familySamplesList(Collector.Type type, List<MetricFamilySamples.Sample> samples) {
MetricFamilySamples mfs = new MetricFamilySamples(fullname, type, help, samples);
List<MetricFamilySamples> mfsList = new ArrayList<MetricFamilySamples>(1);
mfsList.add(mfs);
return mfsList;
}

protected SimpleCollector(Builder b) {
if (b.name.isEmpty()) throw new IllegalStateException("Name hasn't been set.");
String name = b.name;
Expand Down
11 changes: 3 additions & 8 deletions simpleclient/src/main/java/io/prometheus/client/Summary.java
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ public class Summary extends SimpleCollector<Summary.Child> implements Counter.D

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

private List<Quantile> quantiles = new ArrayList<Quantile>();
private final List<Quantile> quantiles = new ArrayList<Quantile>();
private long maxAgeSeconds = TimeUnit.MINUTES.toSeconds(10);
private int ageBuckets = 5;

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

MetricFamilySamples mfs = new MetricFamilySamples(fullname, Type.SUMMARY, help, samples);
List<MetricFamilySamples> mfsList = new ArrayList<MetricFamilySamples>();
mfsList.add(mfs);
return mfsList;
return familySamplesList(Type.SUMMARY, samples);
}

@Override
public List<MetricFamilySamples> describe() {
List<MetricFamilySamples> mfsList = new ArrayList<MetricFamilySamples>();
mfsList.add(new SummaryMetricFamily(fullname, help, labelNames));
return mfsList;
return Collections.<MetricFamilySamples>singletonList(new SummaryMetricFamily(fullname, help, labelNames));
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,8 @@
*/
public class SummaryMetricFamily extends Collector.MetricFamilySamples {

private List<String> labelNames;
private List<Double> quantiles;
private final List<String> labelNames;
private final List<Double> quantiles;

public SummaryMetricFamily(String name, String help, double count, double sum) {
super(name, Collector.Type.SUMMARY, help, new ArrayList<Sample>());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
import java.util.Arrays;
import java.util.ArrayList;
import java.util.List;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
import java.util.Arrays;
import java.util.ArrayList;
import java.util.List;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
import java.util.Arrays;
import java.util.ArrayList;
import java.util.List;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ public List<MetricFamilySamples> collect() {
double value = metric.getValue().doubleValue();
MetricFamilySamples metricFamilySamples = new MetricFamilySamples(
name, Type.GAUGE, name, Collections.singletonList(
new MetricFamilySamples.Sample(name, new ArrayList<String>(), new ArrayList<String>(), value)));
new MetricFamilySamples.Sample(name, Collections.<String>emptyList(), Collections.<String>emptyList(), value)));
samples.add(metricFamilySamples);
}
}
Expand Down

0 comments on commit b49b8a9

Please sign in to comment.