我们有一个应用程序可以在垃圾收集之前生成数千个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