[英]Saving PermGen space with several classloaders
我們在Scala中編寫了一個包含大量類的大型GUI應用程序,我們必須增加PermGen空間才能加載所有類。 應用程序本身顯示了一系列基於屏幕的活動,每個活動都加載了自己的大型類。 在任何時間點只加載/顯示一個活動。 經過幾個活動后,我們在PermGen空間中出現了OutOfMemoryError
。
我理解PermGen空間是垃圾收集的,就像堆的其余部分一樣 ,但是我很想知道是否可以減少每個活動一個ClassLoader
所需的PermGen空間,以便允許類卸載。
所以:
...如果我可以減少每個活動一個ClassLoader所需的PermGen空間,以便允許類卸載。
是的,如果使用的類加載器是垃圾收集的,則可以卸載類的唯一方法。 這意味着對每個類和類加載器本身的引用必須為零。
你的PermGen有多大? 你可以通過以下方式與PermGen碰撞:
-XX:MaxPermGen=256m
在你的命令行上。 將其設置為512米並不罕見。 如果您想要一個真正強大的解決方案,您將需要按照“活動”使用自定義類加載器的路線。 為了幫助調試,還要在命令行中添加以下自解釋參數:
-XX:+TraceClassLoading
這將在JVM中將類加載到命令行時打印出類。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.