我在 Sun 的 JRE6 中运行 Tomcat6 并且每对部署我都会得到 OutOfMemoryException: PermGen。我已经完成了 PermGen 解决方案的谷歌搜索并尝试了许多修复。没有工作。我读了很多关于 Oracle 的 JRockit 的好东西,以及它的 PermGen 分配的大小如何(与 Sun 的 128M 相比),虽然它不能解决问题,但它允许我在 PermGen 异常之间重新部署 100 次,而不是 2现在几次。
JRockit 的问题是在生产中使用它需要花费数千美元购买 WebLogic。存在哪些其他(免费)选项对 PermGen 扩展更宽容?以下 JVM 在这方面的表现如何?
- IBM JVM
- 打开 JDK
- 停电
- 咖啡
...其他?
更新:有人问我为什么认为 PermGen max 是 128M。原因是每当我尝试将其提高到 128M 以上时,我的 JVM 都无法初始化:
[2009-06-18 01:39:44] [info] Error occurred during initialization of VM
[2009-06-18 01:39:44] [info] Could not reserve enough space for object heap
[2009-06-18 01:39:44] [395 javajni.c] [error] CreateJavaVM Failed
奇怪的是,它未能为对象heap保留空间,尽管我不确定它是“the” heap 而不是“a” heap。
我以 1024MB 初始和 1536MB 最大堆启动 JVM。
我将关闭这个问题,因为它已被回答,即。“切换是无用的”,而是问为什么我的 Sun JVM 会因较大的 PermGen 设置而失败?