[xwiki-dev] Possible memory leak ?

Pablo Oliveira pablo.oliveira at enst.fr
Tue Apr 10 10:15:39 CEST 2007


On Apr 09, Ludovic Dubost wrote :
> Right.. the XWikiContext with the classCache and archiveCache (which are 
> needed) is not made for being use for too long without cleaning up.. 
> Maybe there should be some automated cleaning up when it gets too big..

A simple non invasive solution, would be to use a LRUMap instead 
of a simple HashMap.
It can be set to a maximum size and will use a Least Recently Used elimination
when full and adding a new object. See patch below. 

Index: core/src/main/java/com/xpn/xwiki/XWikiContext.java
===================================================================
--- core/src/main/java/com/xpn/xwiki/XWikiContext.java  (revision 2320)
+++ core/src/main/java/com/xpn/xwiki/XWikiContext.java  (working copy)
@@ -31,6 +31,7 @@
 import com.xpn.xwiki.web.*;
 import com.xpn.xwiki.validation.XWikiValidationStatus;
 import org.apache.xmlrpc.server.XmlRpcServer;
+import org.apache.commons.collections.map.LRUMap;
 
 import java.net.URL;
 import java.util.*;
@@ -65,11 +66,13 @@
    private String wikiOwner;
    private XWikiDocument wikiServer;
    private int cacheDuration = 0;
+   private int classCacheSize = 10;
+   private int archiveCacheSize = 10;
 
    // Used to avoid recursive loading of documents if there are recursives usage of classes
-   private Map classCache = new HashMap();
+   private Map classCache = new LRUMap(classCacheSize);
    // Used to avoir reloading archives in the same request
-   private Map archiveCache = new HashMap();
+   private Map archiveCache = new LRUMap(archiveCacheSize);
 
--
Pablo




More information about the devs mailing list