2012-06-08 50 views
2

我遇到了一個問題,即由Xstreams xstream.fromXML(xmlString)方法生成的類正在導致我們的Web容器從正在填充的permgen進行痛苦的垃圾回收。它導致我們的某個樹脂3.2.1服務器無響應,強制重新啓動。Xstream創建類並導致痛苦的permgen集合

我嘗試使用不同的Xstream驅動程序,如jdom,dom4j,DomDriver,xpp和jettison,但沒有運氣。

的類生成有名字,像sun.reflect.GeneratedSerializationConstructorAccessor23

任何人都知道,如果有可能避免這種或這是當前西河實現(1.4.2)中不可避免的副作用?

在此先感謝。

回答

2

問題是我們正在爲每個請求創建一個新的XStream實例。它被設計成多線程和緩存生成的類。將其轉換爲靜態實例修復它。

0

如果您使用CMS收集器,則可以使用-XX:+CMSClassUnloadingEnabled選項啓用燙髮電源的後臺收集。 同時增加燙髮代碼應該是有幫助的-XX:MaxPermSize=N。您可以在this cheat sheet中找到更多與GC有關的選項。

雖然它是JVM GC調優,但沒有修復XStream問題。

+0

增加permgen大小很可能會使問題變得更糟,因爲會有更多的類需要清理。 XX:+ CMSClassUnloadingEnabled在Java 6中默認情況下也是打開的,就我所知,我們的類正在正確地獲取GC'd。問題是,當GC運行時,它可以鎖定整個jvm一段時間。 – nash

+0

@ Nash0 ** 1。**默認情況下,CMS收集器的背景類卸載爲 ** 2。更多的發射空間 - >更多的停頓時間 - >在GC中花費的時間(與應用時間相比)。 –