Our website based on tapestry 4 seems to be out of memory and is crashing every few days no matter what -Xmx I set. It is actually not that bad, with some scripts we get the website restarted within minutes in case of crash. I've been investigating the source of this issue lately using the new Jhat and Jmap tools of the JDK 1.6. Most of the memory seems to be HashMap$Entry objects which I believe are keys to most caches in the app (especially ehcache). But what was surprising is the number of instances of tapestry components. About 11000 pagelinks and roughly the same amount for IfBean and other components after less than 1 day of execution. With jhat I've been able to trace the origins of these components and they originate from ExpressionBinding (72000 instances). I'm not that familiar with the lifecycle of tapestry components but I'm curious to understand why has tapestry created so many instances? And given the numbers of instances, I'm wondering if Tapestry shouldn't have limits on its caches? Would it improve the memory usage if I use cycle.forgetPage(...) for every page?
-- Thanks, Henri.