On 05/03/2010 12:48 PM, Pid wrote: > On 03/05/2010 17:15, Mark Shifman wrote: >> I have a web app running under tomcat-6.0.26 with >> JreMemoryLeakPreventionListener, java jdk1.6.0_18. >> >> Using jmap -histo pid, I can watch >> com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl, etc increase in number >> after running my unmarshal action, followed by undeploy and redeploy. Find >> Leaks in the manager also finds leaks. > > After a few undeploy/redeploy cycles does the number of > WebappClassLoader's also increase?
Yes it increases 1 for each undeploy/redeploy cycle. > >> The JAXBContext instance is created with a singleton that is an enum (using >> Josh Block's pattern): >> >> public enum JAXBContextMascot { >> INSTANCE("com.matrixscience.xmlns.schema.mascot_search_results_2" ); >> private JAXBContext ctx; >> JAXBContextMascot(String contextPath) { >> try { >> ctx =JAXBContext.newInstance(clazz); > > Where does the 'clazz' variable come from? My bad I edited the email argg. should of course be contextPath. > >> } catch (JAXBException e) { >> throw new RuntimeException(e); >> } >> } >> public Unmarshaller createUnmarshaller(){ >> try { >> return ctx.createUnmarshaller(); >> } catch (JAXBException e) { >> throw new RuntimeException(e); >> } >> } >> } >> >> Am I doing something wrong which is causing the memory leak? > > Maybe. > >> JAXBContext.newInstance() can take a ClassLoader argument. Is there some >> ClassLoader I should be using that will get around this? > > Where is the jar with the above code, in a webapp? The code above in in the war for the web app in a class in WEB-INF/classes/org/blablabla It is called via a class that looks like this: public class JAXBMascot { protected static Log log = LogFactory.getLog(JAXBMascot.class); private XMLEventReader reader; private Unmarshaller u = JAXBContextMascot.INSTANCE.createUnmarshaller(); private InputStream jxb_in; public static JAXBMascot getInstance(InputStream in) { JAXBMascot m = new JAXBMascot(); try { m.setJxb_in(in); m.setReader(XMLInputFactory.newInstance().createXMLEventReader(in)); } catch (Exception e) { log.fatal("error getting JAXBMascot instance"); IOUtils.closeQuietly(in); throw new RuntimeException(e); } return m; } .... } This is also in the webapp in WEB-INF/classes/org/blablabla thanks mas > > > p > >> Any help would be appreciated. >> mas >> >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org >> For additional commands, e-mail: users-h...@tomcat.apache.org >> > > --------------------------------------------------------------------- To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org For additional commands, e-mail: users-h...@tomcat.apache.org