title: Tomcat and JAXB memory leaks
body: <p>I have been chasing this for a few days now. 
  We use JAXB, sun implementation, in our app. When stopping Tomcat (6 or 7) there is a severe memory leak logged in the catalina log file listing all the JAXB classes that we have in our application, two sets in two different packages.</p>
  
  <p>I have been through a lot of google and Stack overflow links. I have used JProfiler which shows me that Tomcat is holding onto Enums when they are not used but this should not be the issue. All instances of marshaller or unmarshaller are created locally and set to null for aggressive GC. I ensure that JAXBcontext is null when servlets are destroyed and also in my contextDestroyed I run a System.gc(); as has been suggested to avoid the error.</p>
  
  <p>But still the error is logged.
  I have seen in a Tomcat presentation that this is known error because a JarURLConnection lock is created by JAXBContext.newInstance() apparently this can be avoided by disabling caching, but this did nothing for me.
  <a href="http://people.apache.org/~markt/presentations/2010-11-04-Memory-Leaks-60mins.pdf">http://people.apache.org/~markt/presentations/2010-11-04-Memory-Leaks-60mins.pdf</a></p>
  
  <p><strong>Any other suggestions as to how to fix this memory leak in JAXB running on Tomcat.</strong></p>
  
  <p>This is the error log:</p>
  
  <pre><code>SEVERE: The web application [/myApplication] created a ThreadLocal with key of type [com.sun.xml.bind.v2.ClassFactory$1] (value [com.sun.xml.bind.v2.ClassFactory$1@6a724da1]) and a value of type [java.util.WeakHashMap] (value [{class my.package.model.layout.Element=java.lang.ref.WeakReference@7646bb9f, class my.package.model.layout.ScriptBeforeFileID=java.lang.ref.WeakReference@1dc80063, class my.package.model.layout.OutputProperty=java.lang.ref.WeakReference@359172db, class my.package.model.layout.Data=java.lang.ref.WeakReference@600ba356, class my.package.model.layout.InputProperty=java.lang.ref.WeakReference@1c10945d, class my.package.model.layout.ToPort=java.lang.ref.WeakReference@47c7410, class my.package.model.layout.ConfigFile=java.lang.ref.WeakReference@6a7c8bd, class my.package.model.layout.LayoutInstanceID=java.lang.ref.WeakReference@716bf3b4, class my.package.model.layout.ScriptAfterFunction=java.lang.ref.WeakReference@664ce898, class be.securit.trustbuilder.config.model.........}]) 
      but failed to remove it when the web application was stopped. 
  Threads are going to be renewed over time to try and avoid a probable memory leak.
          17-sep-2013 15:21:45 org.apache.catalina.loader.WebappClassLoader checkThreadLocalMapForLeaks 
  </code></pre>