DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT <http://nagoya.apache.org/bugzilla/show_bug.cgi?id=6550>. ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND INSERTED IN THE BUG DATABASE.
http://nagoya.apache.org/bugzilla/show_bug.cgi?id=6550 Old WebappClassLoaders can't be GC'd. Not all references removed. Summary: Old WebappClassLoaders can't be GC'd. Not all references removed. Product: Tomcat 4 Version: 4.0.2 Final Platform: All URL: http://nyx.obidobi.net/~thomas/tomcat/index.html OS/Version: All Status: UNCONFIRMED Severity: Normal Priority: Other Component: Catalina AssignedTo: [EMAIL PROTECTED] ReportedBy: [EMAIL PROTECTED] I had a memory leak when using Tomcats manager to reload my application. Analyzing the situation i found that Singeltons are never GC'd. Why? Looking deeper there seems to be a problem with old WebappClassLoaders never getting GC'd and the reason seems to be that there are references to the WebappClassLoaders that never get removed. See here for more information: <http://nyx.obidobi.net/~thomas/tomcat/index.html> I have located the problem to: static Hashtables (clBindings, clNameBindings ) located in class org.apache.naming.ContextBindings. The classLoaders are added to these Hashtables by a call from lifecycleEvent in the class NamingContextListner.java ============= NamingContextListner.java, 295 if (container instanceof Context) { // Setting the context in read only mode ContextAccessController.setReadOnly(getName()); try { ContextBindings.bindClassLoader (container, container, ((Container) container).getLoader().getClassLoader()); } catch (NamingException e) { log(sm.getString("naming.bindFailed", e)); } } ============ I think that there should be a call to unbindClassLoader somewhere in NamingContextListner.java, method lifecycleEvent ContextBindings.unbindClassLoader( container, container ); Thomas -- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>