假设是 64 位 JVM,保持 MaxPermSize 小有什么显着的好处吗?
这是在频繁重新部署且存在类加载器泄漏的 Java EE 应用程序的上下文中。作为中期解决方法,将 MaxPermSize 提高到一个荒谬的值似乎非常合理 - 只要它不会耗尽磁盘交换空间。
由于未部署的应用程序的代码几乎全部未使用(除了涉及泄漏的代码),因此它会被操作系统调出。因此,未部署的碎片对物理内存的负载似乎可以忽略不计。这已经通过观察 RSS(Unix 上的工作集大小)得到了验证。
我还应该担心其他影响吗?
From JVM 热点常见问题解答 http://java.sun.com/docs/hotspot/gc1.4.2/faq.html
我应该增加客户端虚拟机中永久代的大小吗?
这永远是一个判断。一般来说,增加一代的大小(这不仅适用于永久代)可以减少各种问题的发生率,但是,这可能会导致其他进程过度分页和/或垃圾收集或抛出异常内存异常。
有两种故障模式需要考虑。
当提高 MaxPermSize 时,以前使用垃圾收集来恢复永久代空间的行为良好的程序可能会因无休止的分页而死亡。对于永久代来说,这通常只发生在临时字符串的大量驻留中。
另一种故障模式是必须为永久代保留地址空间,这将减少堆其余部分的可用空间(最大 -Xmx 可能太大)。这将导致配置为使用所有可用空间的程序在初始化时失败。
Also 本文 https://blogs.oracle.com/jonthecollector/entry/presenting_the_permanent_generation says :
因此,我们利用类保留在永久代中的事实,在收集永久代之前收集永久代。并且永久代目前是串行收集的。
我认为大型永久代会导致 GC 时间更长。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)