java - 为什么内存管理在 Java VM 中如此可见?

标签 java memory-management jvm

我正在尝试编写一些简单的基于 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/

相关文章:

java - 在可能被序列化的类上使用字节码增强技术是否安全,为什么?

c++ - C++中的适配器设计模式和内存管理

kotlin - 在Kotlin中弃用整个包装

java - ExpandableListView 中最初展开的组

java - 在 View 中创建简单的是/否对话框 (Android)

c - 该语句如何测试内存对齐

c++ - G++ 多平台内存泄漏检测工具

java - 从java中找到java.exe位置

java - JVM 在旧代为 'empty' 时运行旧代垃圾回收

java - 如何防止 IntelliJ 在运行测试时删除从生成源编译的类?