Hi Daniel, you are absolutely right.
parser instances are cached using a WeakHashMap, but because the parser itself has a strong reference to the weak key the mapping is never released. argh... stupid me.
replaced the map implementation to a ReferenceMap with weak references for both key and value.
same applies to the XPathQueryBuilder. fixed in svn revision: 366214 thanks a lot for finding this issue. regards marcel Daniel Hagen wrote:
Hi, I am currently developing a server application that uses jackrabbit as content repository. During test runs I noticed the application piling up memory even at times when the application only executes simple queries. I am quite (though of course not absolutely) sure that it is not the application itself holding the memory. The (web-)application uses shortlived JCR sessions, opening the session, executing some queries and logging out again per request, the repository instance itself remains in memory all the time. Running the application with -Xrunhprof:heap=sites gives some hints pointing in direction of the query parser (see results below). The code I use to execute the query is included below. I am using Tomcat 5.5, JDK 1.5.0_06 on Windows 2003 server, Persistence Manager is SimpleDbPersistenceManager connecting to a MySQL 5.0 database. I am using a Build of jackrabbit created on 28.12.2005. Are there any known issues concerning memory leaks? Are there any hints what I could do to further isolate the problem? Any help will be greatly appreciated! Regards Daniel Code Snippet of the function : ============================== QueryManager queryManager = session.getWorkspace().getQueryManager(); Query query = queryManager.createQuery( queryText, Query.SQL ); QueryResult queryResult = query.execute(); return queryResult; [ return queryresult, logout from session ... ] HPROF Excerpt: ============== SITES BEGIN (ordered by live bytes) Thu Jan 05 15:44:55 2006 percent live alloc'ed stack class rank self accum bytes objs bytes objs trace name 1 17.55% 17.55% 5936800 362 5936800 362 329857 int[] 2 17.55% 35.09% 5936800 362 5936800 362 329856 int[] 3 8.78% 43.88% 2971296 362 2971296 362 329855 char[] 4 2.01% 45.88% 679328 21229 5142240 160695 318751 org.apache.commons.collections.map.AbstractReferenceMap$WeakRef 5 1.56% 47.45% 528888 86 2053592 148 331237 byte[] TRACE 329857: org.apache.jackrabbit.core.query.sql.SimpleCharStream.<init>(SimpleCharStrea m.java:263) org.apache.jackrabbit.core.query.sql.SimpleCharStream.<init>(SimpleCharStrea m.java:269) org.apache.jackrabbit.core.query.sql.JCRSQLParser.<init>(JCRSQLParser.java:1 132) org.apache.jackrabbit.core.query.sql.JCRSQLQueryBuilder.createQuery(JCRSQLQu eryBuilder.java:127) TRACE 329856: org.apache.jackrabbit.core.query.sql.SimpleCharStream.<init>(SimpleCharStrea m.java:262) org.apache.jackrabbit.core.query.sql.SimpleCharStream.<init>(SimpleCharStrea m.java:269) org.apache.jackrabbit.core.query.sql.JCRSQLParser.<init>(JCRSQLParser.java:1 132) org.apache.jackrabbit.core.query.sql.JCRSQLQueryBuilder.createQuery(JCRSQLQu eryBuilder.java:127) TRACE 329855: org.apache.jackrabbit.core.query.sql.SimpleCharStream.<init>(SimpleCharStrea m.java:261) org.apache.jackrabbit.core.query.sql.SimpleCharStream.<init>(SimpleCharStrea m.java:269) org.apache.jackrabbit.core.query.sql.JCRSQLParser.<init>(JCRSQLParser.java:1 132) org.apache.jackrabbit.core.query.sql.JCRSQLQueryBuilder.createQuery(JCRSQLQu eryBuilder.java:127)
-- -----------------------------------------< [EMAIL PROTECTED] >--- Marcel Reutegger, Day Software AG, Barfuesserplatz 6, CH - 4001 Basel T +41 61 226 98 98, F +41 61 226 98 97 -----------------------------------------------< http://www.day.com >---