我們有一個應用程序可以在垃圾收集之前生成數千個Java ClassLoaders和classes。我們確信沒有類加載器泄漏,但是我們正在獲得permgen錯誤(即使存在,這個問題也與任何潛在泄漏正交)。將Java ClassLoaders添加到堆而不是perm gen
有沒有什麼方法可以指定某些ClassLoaders及其加載的類放在堆中而不是放在perm gen中?
我們在Linux上使用Oracle JDK Java 6。
編輯:看起來像Java 8將不再有PermGen。它將被Metaspace取代。
http://java.dzone.com/articles/java-8-permgen-metaspace
謝謝。 「當然,你會遇到燙髮的錯誤 - 這就是班級裝載員上課的地方,你期望什麼?」我知道這一點,這就是我問這個問題的原因。如果這些對象可以放在常規內存中,那麼我們不會得到permgen錯誤(我們可能會遇到堆錯誤,這可能有助於解決我們的問題)。我們目前使用了385M的PermGen,我不認爲增加更多是個好主意。正如我所說的,可能會有泄漏,我們花了幾天的時間使用Visual VM和YourKit來尋找它。事情可能會更容易追查,如果我們有堆錯誤,而不是permgen。 – 2013-03-20 22:57:31
不是。內存是內存 - 分代傳統是GC /內存模型設計的選擇。爲什麼增加它不是一個好主意?如果你有堆錯誤,增加堆是否也是一個壞主意?這整個方法是錯誤的。 – duffymo 2013-03-21 00:05:44