我們在Scala中編寫了一個大型的GUI應用程序,並且有很多類,我們必須增加PermGen空間才能加載所有類。該應用程序本身顯示了一系列基於屏幕的活動,每個活動都加載了自己的大量類。在任何時候只有一個活動被加載/顯示。在經歷了幾次活動之後,我們在PermGen空間中有了一個OutOfMemoryError
。用幾個類加載器保存PermGen空間
據我所知,PermGen的空間是garbage collected just like the rest of the heap,但我很想看看是否可以通過減少PermGen空間所需的空間。每個活動一個ClassLoader
以便允許班級卸載。
所以:
- 我明白,由系統類裝入器裝入類不能被卸載,因爲他們將永遠被他們的類加載器被引用。真的嗎?
- 如果不再有我的自定義類加載器加載的類的實例在附近,並且類加載器可以被垃圾收集,它的類將被卸載,釋放PermGen空間?
- 有沒有關於(或常見的錯誤會阻止)類卸載的警告?
你的PermGen有多大? –
128m太小,現在可以使用256m,但需要多長時間?... –