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; }