Author: shuber
Date: Fri Oct 19 13:28:05 2007
New Revision: 18950

URL: https://svndev.jahia.net/websvn/listing.php?sc=3D1&rev=3D18950&repname=
=3Djahia
Log:
Modify ReferenceCache implementation to use weak reference for group entrie=
s, so that the JVM can collect the GroupCacheKeys that have been flushed fr=
om the memory.

Modified:
    branches/JAHIA-5-0-SP-BRANCH/core/src/java/org/jahia/services/cache/ref=
erence/ReferenceCacheImpl.java

Modified: branches/JAHIA-5-0-SP-BRANCH/core/src/java/org/jahia/services/cac=
he/reference/ReferenceCacheImpl.java
URL: https://svndev.jahia.net/websvn/diff.php?path=3D/branches/JAHIA-5-0-SP=
-BRANCH/core/src/java/org/jahia/services/cache/reference/ReferenceCacheImpl=
.java&rev=3D18950&repname=3Djahia
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
--- branches/JAHIA-5-0-SP-BRANCH/core/src/java/org/jahia/services/cache/ref=
erence/ReferenceCacheImpl.java (original)
+++ branches/JAHIA-5-0-SP-BRANCH/core/src/java/org/jahia/services/cache/ref=
erence/ReferenceCacheImpl.java Fri Oct 19 13:28:05 2007
@@ -1,6 +1,7 @@
 package org.jahia.services.cache.reference;
 =

 import java.util.*;
+import java.lang.ref.WeakReference;
 =

 import org.apache.commons.collections.map.ReferenceMap;
 import org.apache.commons.collections.map.LRUMap;
@@ -39,6 +40,10 @@
  * flag is not guaranteed to be present in any given release.
  * Prior to version 1.3.1, the Java HotSpot VMs cleared soft references wh=
enever it =

  * found them.
+ *
+ * Groups use WeakHashMaps internally so that when a cache key is flushed,=
 the group doesn't
+ * retain a reference to the key either. If only a WeakSet class existed, =
this would have
+ * been better, but here we just set null values in the WeakHashMap.
  * =

  * @author Serge Huber
  *
@@ -68,7 +73,10 @@
             if (logger.isDebugEnabled()) {
                 logger.debug("Flushing group " + (String) linkEntry.getKey=
());
             }
-            cacheImplementation.flushKeys(new HashSet((Set) linkEntry.getV=
alue()));
+            Map groupKeys =3D (Map) linkEntry.getValue();
+            if (groupKeys !=3D null) {
+                cacheImplementation.flushKeys(new HashSet(groupKeys.keySet=
()));
+            }
             return result;
         }
         =

@@ -178,7 +186,7 @@
             Iterator groupIterator =3D groups.entrySet().iterator();
             while (groupIterator.hasNext()) {
                 Map.Entry curEntry =3D (Map.Entry) groupIterator.next();
-                Set keySet =3D (Set) curEntry.getValue();
+                Map keySet =3D (Map) curEntry.getValue();
                 totalSize +=3D keySet.size();
             }
         } catch (ConcurrentModificationException cme) {
@@ -207,7 +215,10 @@
         try {
             writeLock.acquire();
             try {
-                keysToFlush =3D (Set) groups.get(groupName);
+                Map groupKeys =3D (Map) groups.get(groupName);
+                if (groupKeys !=3D null) {
+                    keysToFlush =3D groupKeys.keySet();
+                }
                 if (keysToFlush =3D=3D null) {
                     keysToFlush =3D new HashSet();
                 } else {
@@ -250,11 +261,11 @@
         try {
             writeLock.acquire();
             try {
-                Set currentKeys =3D (Set) groups.get(groupName);
+                Map currentKeys =3D (Map) groups.get(groupName);
                 if (currentKeys =3D=3D null) {
-                    currentKeys =3D new HashSet();
+                    currentKeys =3D new WeakHashMap();
                 }
-                currentKeys.add(key);
+                currentKeys.put(key, null);
                 groups.put(groupName, currentKeys);
             } finally {
                 writeLock.release();
@@ -268,7 +279,7 @@
         try {
             writeLock.acquire();
             try {
-                Set currentKeys =3D (Set) groups.get(groupName);
+                Map currentKeys =3D (Map) groups.get(groupName);
                 if (currentKeys =3D=3D null) {
                     return;
                 }

_______________________________________________
cvs_list mailing list
[email protected]
http://lists.jahia.org/cgi-bin/mailman/listinfo/cvs_list

Reply via email to