8

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

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

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

还有其他我应该关注的影响吗?

4

1 回答 1

6

来自JVM HotSpot 常见问题

我应该增加客户端虚拟机中永久代的大小吗?

这将永远是一个判断电话。一般来说,增加一代的大小(这不仅适用于永久代)可以减少各种问题的发生率,但是,这可能会导致其他进程过度分页和/或垃圾收集或抛出-内存异常。

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

提高 MaxPermSize 时,以前行为良好的程序可能会因无休止的分页而死掉,这些程序用于垃圾收集以恢复永久代空间。对于永久代,这通常只发生在临时字符串的大量实习中。

另一种故障模式是必须为永久代保留地址空间,这将减少堆其余部分的可用空间(最大值 -Xmx 可能会太大)。这将导致配置为使用所有可用空间的程序在初始化时失败。

这篇文章还说:

因此,我们通过在收集永久代之前收集永久代来利用类保留在永久代中的事实。而永久代目前是连续采集的。

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

于 2012-03-09T15:49:23.470 回答