【发布时间】:2011-12-07 22:06:35
【问题描述】:
我们正在用 Scala 编写一个包含很多类的大型 GUI 应用程序,并且我们不得不增加 PermGen 空间才能加载所有类。该应用程序本身显示了一系列基于屏幕的活动,每个活动都加载自己的大量类。在任何时间点都只加载/显示一个活动。在经历了一些活动之后,我们在 PermGen 空间中有一个OutOfMemoryError。
我知道 PermGen 空间是 garbage collected just like the rest of the heap,但我很想看看我是否可以通过例如减少所需的 PermGen 空间。每个活动一个ClassLoader,以便允许类卸载。
所以:
- 我了解系统 ClassLoader 加载的类无法卸载,因为它们的类加载器将永远引用它们。这是真的吗?
- 如果我的自定义类加载器加载的类的实例不再存在,并且可以对类加载器进行垃圾收集,是否会卸载其类,从而释放 PermGen 空间?
- 是否有任何关于类卸载的警告(或会阻止的常见错误)?
【问题讨论】:
-
你的 PermGen 有多大?
-
128m 太小了,256m 暂时可以用,但能用多久?...
标签: java classloader permgen