我正在尝试编写一些简单的基于 Spring 的 Web 应用程序并将它们部署到 Tomcat。几乎立刻,我就需要使用 -XX:MaxPermSize(以及 -Xmx 和 -Xms)来自定义 Tomcat 的 JVM 设置;没有这个,服务器很容易用完 PermGen 空间。
与其他垃圾收集语言相比,为什么 Java VM 会出现这样的问题?比较 Java、Ruby、Perl 和 Python 中 X 的“调整 X 内存使用”计数表明,Java 在 Google 中的点击率比其他语言的总和高出一个数量级。
我也有兴趣引用技术论文/博客文章/等解释 JVM GC 实现背后的设计选择,跨不同 JVM 或与其他解释语言 VM 进行比较(例如,将 Sun 或 IBM JVM 与 Parrot 进行比较) . JVM 用户仍然必须处理非自动调整的堆/permgen 大小是否存在技术原因?
最佳答案
您的问题的标题具有误导性(不是故意的,我知道):PermSize 问题(其中有很多,我是几年前第一个诊断出 Tomcat/Sun PermGen 问题的人之一,当时有对这个问题还没有任何了解)不是 Java 特性,而是 Sun VM 特性。
如果您使用不使用永久生成的虚拟机(如果我没记错的话,比如 IBM 虚拟机),则不会出现永久生成问题。
所以这不是“Java”问题,而是 Sun VM 实现问题。
关于java - 为什么内存管理在 Java VM 中如此可见?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2550529/