2010-08-27 187 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」)