aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2022-12-14 15:39:37 +0100
committerGitHub <noreply@github.com>2022-12-14 15:39:37 +0100
commit2aacda317261a8d5fd50e2c7cfc68ed8a963e66b (patch)
tree21c54e23b0d00d375087f3bba04e90a2a1d6b785
parent2fcdeecdde284d8466147524948e8665d5a51db4 (diff)
parent4aceaed268b1f49aed8508adfa7b4760e316c05a (diff)
Merge pull request #25260 from vespa-engine/balder/ensure-reuse-of-low-indexes
Keep a static representation of strings for low indexes [0...999].
-rw-r--r--vespajlib/src/main/java/com/yahoo/tensor/TensorAddress.java21
1 files changed, 18 insertions, 3 deletions
diff --git a/vespajlib/src/main/java/com/yahoo/tensor/TensorAddress.java b/vespajlib/src/main/java/com/yahoo/tensor/TensorAddress.java
index 342aca5fb3d..5636150bca1 100644
--- a/vespajlib/src/main/java/com/yahoo/tensor/TensorAddress.java
+++ b/vespajlib/src/main/java/com/yahoo/tensor/TensorAddress.java
@@ -13,6 +13,21 @@ import java.util.stream.Collectors;
* @author bratseth
*/
public abstract class TensorAddress implements Comparable<TensorAddress> {
+ private static final String [] SMALL_INDEXES = createSmallIndexesAsStrings(1000);
+
+ private static String [] createSmallIndexesAsStrings(int count) {
+ String [] asStrings = new String[count];
+ for (int i = 0; i < count; i++) {
+ asStrings[i] = String.valueOf(i);
+ }
+ return asStrings;
+ }
+ private static String asString(int index) {
+ return (index < SMALL_INDEXES.length) ? SMALL_INDEXES[index] : String.valueOf(index);
+ }
+ private static String asString(long index) {
+ return (index < SMALL_INDEXES.length) ? SMALL_INDEXES[(int)index] : String.valueOf(index);
+ }
public static TensorAddress of(String[] labels) {
return new StringTensorAddress(labels);
@@ -127,7 +142,7 @@ public abstract class TensorAddress implements Comparable<TensorAddress> {
@Override
public TensorAddress withLabel(int index, long label) {
String[] labels = Arrays.copyOf(this.labels, this.labels.length);
- labels[index] = String.valueOf(label);
+ labels[index] = TensorAddress.asString(label);
return new StringTensorAddress(labels);
}
@@ -151,7 +166,7 @@ public abstract class TensorAddress implements Comparable<TensorAddress> {
public int size() { return labels.length; }
@Override
- public String label(int i) { return String.valueOf(labels[i]); }
+ public String label(int i) { return TensorAddress.asString(labels[i]); }
@Override
public long numericLabel(int i) { return labels[i]; }
@@ -165,7 +180,7 @@ public abstract class TensorAddress implements Comparable<TensorAddress> {
@Override
public String toString() {
- return "cell address (" + Arrays.stream(labels).mapToObj(String::valueOf).collect(Collectors.joining(",")) + ")";
+ return "cell address (" + Arrays.stream(labels).mapToObj(TensorAddress::asString).collect(Collectors.joining(",")) + ")";
}
}