java - 哪种免费的 JVM 实现具有最好的 PermGen 处理能力?

标签 java jvm permgen

我在 Sun 的 JRE6 中运行 Tomcat6,每对部署我都会遇到 OutOfMemoryException: PermGen。我已经完成了 PermGen 解决方案的谷歌搜索并尝试了许多修复。没有工作。我读了很多关于 Oracle 的 JRockit 的好东西,以及它的 PermGen 分配如何在大小上达到千兆(与 Sun 的 128M 相比),虽然它没有解决问题,但它允许我在 PermGen 异常之间重新部署 100 次,而不是 2现在的时间。

JRockit 的问题是要在生产环境中使用它,您需要购买值(value)数千美元的 WebLogic。存在哪些其他(免费)选项更容忍 PermGen 扩展?以下 JVM 在这方面的表现如何?

  • IBM 虚拟机
  • 打开JDK
  • 黑幕
  • 咖啡馆

...其他人?

更新:有人问我为什么认为 PermGen max 是 128M。原因是因为每当我尝试将其提高到 128M 以上时,我的 JVM 都无法初始化:

[2009-06-18 01:39:44] [info] VM 初始化期间发生错误 [2009-06-18 01:39:44] [信息] 无法为对象堆保留足够的空间 [2009-06-18 01:39:44] [395 javajni.c] [错误] CreateJavaVM 失败

奇怪的是它未能尝试为对象保留空间,尽管我不确定它是“the”堆而不是“a”堆。

我使用 1024MB 初始堆和 1536MB 最大堆启动 JVM。

我将关闭这个问题,因为它已经得到回答,即。 “切换没用”并改为询问Why does my Sun JVM fail with larger PermGen settings?

最佳答案

我同意 Michael Borgwardt 的观点,您可以增加 PermGen 的大小,但我不同意这主要是由于内存泄漏造成的。 PermGen 空间被大量使用反射的应用程序侵 eclipse 。所以基本上,如果您有一个在 Tomcat 中运行的 Spring/Hibernate 应用程序,请准备好将 PermGen 空间增加很多。

关于java - 哪种免费的 JVM 实现具有最好的 PermGen 处理能力?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1009042/

相关文章:

java - 验证临时对象是否已创建

java - 如何使用 HttpServletRequest 在 Java 中捕获请求头

java - 这些java native 内存是从哪里分配的?

java - 使用 permstat 计算类和 permgen

java - Sonar 如何成功运行单元测试

Java使用finalize关闭子线程?

Java引入临时对象

java - 使用 "invokedynamic"- 幕后发生了什么?

java - PermGen Out of Memory 原因

function - 在 JVM 中分配大量 PermGen 空间时,Scala 中的一等函数能否成为一个问题?