Index: jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/IdPathCache.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/IdPathCache.java (revision 9a059ff)
+++ jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/IdPathCache.java (revision 4374a3e7af2b58cf76d149ec2a5fffa5fbb75e7b)
@@ -23,34 +23,19 @@
import org.slf4j.LoggerFactory;
/**
- * IdPathCache ...
+ * The IdPathCache maintains a bidirectional LRU cache from itemId to its path.
*/
class IdPathCache {
private static Logger log = LoggerFactory.getLogger(IdPathCache.class);
- /**
- * @see JCR-3305: limit cache size
- */
- private static final int CACHESIZE = 10000;
+ private LRUCache idToPathCache;
+ private LRUCache pathToIdCache;
- private Map idToPathCache;
- private Map pathToIdCache;
-
- public IdPathCache() {
- idToPathCache = new LinkedHashMap(CACHESIZE, 1) {
- @Override
- protected boolean removeEldestEntry(Map.Entry eldest) {
- return this.size() > CACHESIZE;
+ public IdPathCache(int limit) {
+ idToPathCache = new LRUCache(limit);
+ pathToIdCache = new LRUCache(limit);
- }
+ }
- };
- pathToIdCache = new LinkedHashMap(CACHESIZE, 1) {
- @Override
- protected boolean removeEldestEntry(Map.Entry eldest) {
- return this.size() > CACHESIZE;
- }
- };
- }
public ItemId getItemId(String path) {
return pathToIdCache.get(path);
@@ -93,5 +78,20 @@
public void clear() {
idToPathCache.clear();
pathToIdCache.clear();
+ }
+
+ private class LRUCache extends LinkedHashMap {
+
+ private final int limit;
+
+ public LRUCache(int limit) {
+ super(16, 0.75f, true);
+ this.limit = limit;
+ }
+
+ @Override
+ protected boolean removeEldestEntry(Map.Entry eldest) {
+ return size() > limit;
+ }
}
}
Index: jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/URIResolverImpl.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/URIResolverImpl.java (revision 9a059ff)
+++ jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/URIResolverImpl.java (revision 4374a3e7af2b58cf76d149ec2a5fffa5fbb75e7b)
@@ -58,6 +58,11 @@
private static Logger log = LoggerFactory.getLogger(URIResolverImpl.class);
+ /**
+ * @see JCR-3305: limit cache size
+ */
+ private static final int CACHESIZE = 10000;
+
private final URI repositoryUri;
private final RepositoryServiceImpl service;
private final Document domFactory;
@@ -77,7 +82,7 @@
if (cache != null) {
return cache;
} else {
- IdPathCache emptyCache = new IdPathCache();
+ IdPathCache emptyCache = new IdPathCache(CACHESIZE);
idPathCaches.put(workspaceName, emptyCache);
return emptyCache;
}