Patrick Mahoney created JRUBY-6522: -------------------------------------- Summary: ThreadLocal RubyEncoding.UTF8_CODER leaks class loader Key: JRUBY-6522 URL: https://jira.codehaus.org/browse/JRUBY-6522 Project: JRuby Issue Type: Bug Components: Encoding, Rails WAR Deployment Affects Versions: JRuby 1.6.6 Environment: Linux w/ OpenJDK 1.6.0_23 Reporter: Patrick Mahoney
If one loads JRuby from a new classloader (different from that of the current thread), instantiates a Ruby instance, then tearDown and nullifies the Ruby instance, the JRuby classes loaded by the new classloader are not freed because an object that extends ThreadLocal remains and references that classloader. At least one such ThreadLocal appears to be at org/jruby/RubyEncoding.java:265 stored in UTF8_CODER. I've detailed sample code that both shows the leak and works around it: http://stackoverflow.com/questions/9541207/loading-jruby-at-runtime-and-classloader-leak A rough outline is: In a loop in a single thread: load JRuby from a new classloader instantiate Ruby from that classloader tear it down PermGen space OutOfMemoryException after several (~13) iterations Work around: In a loop in a single thread: load JRuby from a new classloader instantiate Ruby from that classloader in a separate thread tear it down stop that thread 100 iterations complete with no problems I see there are other ThreadLocal bugs reported here, some of relevance to running with JRuby-Rack and/or servlet containers. Not sure if this is fixable or if it just must be lived with. Is being redeployable in a servlet container currently possible and/or a JRuby goal? Some relevant references: http://wiki.apache.org/tomcat/MemoryLeakProtection http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6254531 -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators: https://jira.codehaus.org/secure/ContactAdministrators!default.jspa For more information on JIRA, see: http://www.atlassian.com/software/jira --------------------------------------------------------------------- To unsubscribe from this list, please visit: http://xircles.codehaus.org/manage_email