pab*_*blo 5 java garbage-collection permgen classloader java-6
我正在尝试生成类并在运行时加载它们.
我正在使用一个ClassLoader
对象来加载类.因为我不想耗尽PermGen
内存,所以我不时引用类加载器并创建一个新的加载要使用的新类.这似乎工作正常,我不会PermGen
失去记忆.问题是,当我这样做时,一段时间后我得到以下错误:
java.lang.OutOfMemoryError: GC overhead limit exceeded
Run Code Online (Sandbox Code Playgroud)
所以我的问题是,什么时候我应该取消引用类加载器以避免错误?:
我应该在我的代码中监视PermGen
用法,以便在取消使用接近限制System.gc()
时取消引用类加载器并调用PermGen
吗?
或者我应该采用不同的方法?
谢谢
对此没有一个正确的答案.
一方面,如果取消链接类加载器正在解决你的permgen泄漏问题,那么你应该继续这样做.
另一方面,"超出GC开销限制"错误意味着您的应用程序花费了太多时间进行垃圾回收.在大多数情况下,这意味着您的堆太满了.但这可能意味着两件事之一:
堆太小,无法满足应用程序的要求.
您的应用程序有内存泄漏.
您可以假设问题是前者,只是增加堆大小.但如果真正的问题是后者,那么增加堆大小只是推迟不可避免的......并且正确的做法是找到并修复内存泄漏.
不要打电话System.gc()
.它无济于事.
归档时间: |
|
查看次数: |
1757 次 |
最近记录: |