diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2021-09-08 21:53:26 +0200 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2021-09-08 21:53:26 +0200 |
commit | 4d77164defb24a511cf3e9d4aa13f9782bce8982 (patch) | |
tree | ad35ae654d61b1291bbb944d3002641eec28f065 | |
parent | 66e16f6740f3893fa68c9209b62de97cf157d529 (diff) |
As there are very few unique dimensions, normally in the rannge 5-30, a dictionary will significantly reduce memory bloat.
One large instance running OOM had 25 unique, but 500k DimensionId objects.
-rw-r--r-- | metrics-proxy/src/main/java/ai/vespa/metricsproxy/metric/model/DimensionId.java | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/metrics-proxy/src/main/java/ai/vespa/metricsproxy/metric/model/DimensionId.java b/metrics-proxy/src/main/java/ai/vespa/metricsproxy/metric/model/DimensionId.java index b99f720cb03..73c97573a31 100644 --- a/metrics-proxy/src/main/java/ai/vespa/metricsproxy/metric/model/DimensionId.java +++ b/metrics-proxy/src/main/java/ai/vespa/metricsproxy/metric/model/DimensionId.java @@ -1,6 +1,9 @@ // Copyright 2020 Oath Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package ai.vespa.metricsproxy.metric.model; +import com.yahoo.yolean.concurrent.CopyOnWriteHashMap; + +import java.util.Map; import java.util.Objects; /** @@ -8,10 +11,13 @@ import java.util.Objects; */ public final class DimensionId { + private static final Map<String, DimensionId> dictionary = new CopyOnWriteHashMap<>(); public final String id; private DimensionId(String id) { this.id = id; } - public static DimensionId toDimensionId(String id) { return new DimensionId(id); } + public static DimensionId toDimensionId(String id) { + return dictionary.computeIfAbsent(id, key -> new DimensionId(key)); + } @Override public boolean equals(Object o) { |