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