2012-03-09 79 views
8

假设一个64位的JVM,保持MaxPermSize的小有什么好处吗?保持MaxPermSize小有什么好处吗?

这是在经常重新部署的Java EE应用程序的上下文中,并且存在类加载器泄漏。作为一个中期的解决方法,只要将MaxPermSize提升到一个荒谬的值,似乎是非常合理的 - 只要它不会使磁盘交换空间失效。

由于未部署应用程序的代码几乎全部未使用(除了涉及泄漏的代码),它被操作系统调出。因此,从未部署的碎石物理内存的负载似乎可以忽略不计;这已通过观察RSS(Unix上的工作集大小)进行验证。

我应该关注其他效果吗?

回答

6

JVM HotSpot FAQ

我应该增加持久代的尺寸在客户端虚拟机?

这将永远是一个判断呼吁。一般来说,增加一代人的规模(这不仅适用于永久代),可以减少各种各样问题的发生率。但是,这可能会导致其他进程过度页面化和/或垃圾收集或丢弃,内存异常。

有两种故障模式需要考虑。

当提高MaxPermSize时,以前运行良好的程序用于垃圾回收以恢复永久生成空间将会死于无限分页。对于永久的一代人来说,这通常只会伴随着临时弦的沉重实习。

另一种失败模式是地址空间必须为永久生成保留,这会减少可用于剩余堆的可用空间(最大-Xmx可能会过大)。这会导致配置为使用所有可用空间的程序在初始化时失败。

而且this article说:

所以我们采取的事实,即类是通过收集年老代之前收集持久代保存在永久代的优势。永久世代目前正在连续收集。

大型永久代可能会导致更长的GC时间我认为。

+0

是的,GC令人担忧 - 我担心所有的枯木都必须被分页。谢谢! – 2012-03-09 16:01:26