You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by gn...@apache.org on 2017/09/29 07:25:33 UTC
[2/9] karaf git commit: Deduplicate common OSGi filter strings
Deduplicate common OSGi filter strings
Based on a heap dump with a large number of features/bundles,
5 strings have a large number of duplicates -- ~48K duplicate strings,
wasting ~1.9MiB of memory.
Create a small interning Map, which can normalize these, squashing
a number of these duplicates.
Signed-off-by: Robert Varga <ni...@hq.sk>
Project: http://git-wip-us.apache.org/repos/asf/karaf/repo
Commit: http://git-wip-us.apache.org/repos/asf/karaf/commit/c68e8c6e
Tree: http://git-wip-us.apache.org/repos/asf/karaf/tree/c68e8c6e
Diff: http://git-wip-us.apache.org/repos/asf/karaf/diff/c68e8c6e
Branch: refs/heads/master
Commit: c68e8c6e022d38b2d9fe293a4cb365eb6ffc96ca
Parents: 8fc4d28
Author: Robert Varga <ni...@hq.sk>
Authored: Tue Sep 26 17:20:10 2017 +0200
Committer: Robert Varga <ni...@hq.sk>
Committed: Wed Sep 27 09:55:03 2017 +0200
----------------------------------------------------------------------
.../internal/resolver/SimpleFilter.java | 23 +++++++++++++++++++-
1 file changed, 22 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/karaf/blob/c68e8c6e/features/core/src/main/java/org/apache/karaf/features/internal/resolver/SimpleFilter.java
----------------------------------------------------------------------
diff --git a/features/core/src/main/java/org/apache/karaf/features/internal/resolver/SimpleFilter.java b/features/core/src/main/java/org/apache/karaf/features/internal/resolver/SimpleFilter.java
index 3464a4e..117734e 100644
--- a/features/core/src/main/java/org/apache/karaf/features/internal/resolver/SimpleFilter.java
+++ b/features/core/src/main/java/org/apache/karaf/features/internal/resolver/SimpleFilter.java
@@ -19,10 +19,12 @@ package org.apache.karaf.features.internal.resolver;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Deque;
+import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
+import java.util.Set;
import org.apache.felix.utils.version.VersionRange;
@@ -38,12 +40,27 @@ public class SimpleFilter {
public static final int PRESENT = 8;
public static final int APPROX = 9;
+ /**
+ * Strings which are commonly found in filter specification. We use this map as an interner.
+ */
+ private static final Set<String> COMMON_STRINGS;
+
+ static {
+ Set<String> s = new HashSet<>(8);
+ s.add("optional");
+ s.add("osgi.ee");
+ s.add("resolution");
+ s.add("uses");
+ s.add("version");
+ COMMON_STRINGS = s;
+ }
+
private final String name;
private final Object value;
private final int op;
public SimpleFilter(String name, Object value, int op) {
- this.name = name;
+ this.name = internIfCommon(name);
this.value = value;
this.op = op;
}
@@ -125,6 +142,10 @@ public class SimpleFilter {
}
}
+ private static String internIfCommon(String str) {
+ return str != null && COMMON_STRINGS.contains(str) ? str.intern() : str;
+ }
+
private static void toString(StringBuilder sb, List<?> list) {
for (Object o : list) {
SimpleFilter sf = (SimpleFilter) o;