Author: thomasm
Date: Thu Oct 24 09:26:12 2013
New Revision: 1535325

URL: http://svn.apache.org/r1535325
Log:
OAK-455 Caching in MongoMK (add a utility method unshareString, which can be 
disabled when Java 7u6 becomes the minimum)

Modified:
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/MongoNodeStore.java
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/util/Utils.java

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/MongoNodeStore.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/MongoNodeStore.java?rev=1535325&r1=1535324&r2=1535325&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/MongoNodeStore.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/MongoNodeStore.java
 Thu Oct 24 09:26:12 2013
@@ -674,9 +674,7 @@ public final class MongoNodeStore
             }
             set.removeAll(removed);
             for (String name : added) {
-                // make sure the name string does not contain
-                // unnecessary baggage
-                set.add(new String(name));
+                set.add(Utils.unshareString(name));
             }
             c2.children.addAll(set);
             nodeChildrenCache.put(key, c2);
@@ -693,17 +691,13 @@ public final class MongoNodeStore
                     for (String childPath : added) {
                         String name = PathUtils.getName(childPath);
                         if (names.higher(name) != null) {
-                            // make sure the name string does not contain
-                            // unnecessary baggage
-                            names.add(new String(name));
+                            names.add(Utils.unshareString(name));
                         }
                     }
                 } else {
                     // add all
                     for (String childPath : added) {
-                        // make sure the name string does not contain
-                        // unnecessary baggage
-                        names.add(new String(PathUtils.getName(childPath)));
+                        
names.add(Utils.unshareString(PathUtils.getName(childPath)));
                     }
                 }
                 // any changes?

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/util/Utils.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/util/Utils.java?rev=1535325&r1=1535324&r2=1535325&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/util/Utils.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/util/Utils.java
 Thu Oct 24 09:26:12 2013
@@ -40,6 +40,21 @@ import static com.google.common.base.Pre
  */
 public class Utils {
     
+    /**
+     * Make sure the name string does not contain unnecessary baggage (shared
+     * strings).
+     * <p>
+     * This is only needed for older versions of Java (before Java 7 update 6).
+     * See also
+     * 
http://mail.openjdk.java.net/pipermail/core-libs-dev/2012-May/010257.html
+     * 
+     * @param x the string
+     * @return the new string
+     */
+    public static String unshareString(String x) {
+        return new String(x);
+    }
+    
     public static int pathDepth(String path) {
         if (path.equals("/")) {
             return 0;
@@ -92,8 +107,10 @@ public class Utils {
             size += map.size() * 136;
         } else {
             // overhead for some other kind of map
-            size += 112; // TreeMap (80) + unmodifiable wrapper (32)
-            size += map.size() * 64; // 64 bytes per entry
+            // TreeMap (80) + unmodifiable wrapper (32)
+            size += 112; 
+            // 64 bytes per entry
+            size += map.size() * 64; 
         }
         return size;
     }


Reply via email to