2010-08-27 190 views
13

在系统测试中最近部署之后,我们的一个servlet受到的打击比平常更加困难,我们注意到内存开始攀升,weblogic最终死亡。 我的实习生,我很自豪,发现了内存泄漏的根源。JAXBContext.newInstance内存泄露

每当一个请求时,此行被调用:

JAXBContext jc = JAXBContext.newInstance(“ruby.oracle_servlet.schemas”); 

出于某种原因,该对象永远不会被垃圾收集。 一旦我们将它设置为静态并移动到初始化位置,我们的内存泄漏就消失了。

我们的另一位开发人员在独立的Java应用程序的while循环中放了这行代码,同时也看到了内存的变化。

有没有人有任何想法,为什么该对象不会被垃圾收集?

感谢

回答

8
+2

链接更新:http://jaxb.java.net/guide/Performance_and_thread_safety.html – 2012-05-22 18:35:42

+0

@ThangPham - 谢谢,我已经更新了我与您所提供的新的链接的答案。 – 2012-05-22 18:45:03

+0

这是JAXB for Java 7发布时的一个已知问题吗?您提供的解决方案仍然存在,但很高兴知道这是否仍然需要积极关注。 – 2013-10-14 20:14:05

1

是的,这是一个泄漏。每次调用此方法时,它都会加载类“ruby.oracle_servlet.schemas”。

JAXBContext.newInstance(“ruby.oracle_servlet.schemas”)