Myeclipse与Tomcat环境下解决OutOfMemoryError: PermGen space的痛苦与收获
需积分: 10 172 浏览量
更新于2024-09-12
收藏 78KB DOCX 举报
在IT开发过程中,遇到"OutOfMemoryError: PermGen space"错误是常见的挑战,尤其是在使用Myeclipse 8.5和Tomcat 6.x的环境中。该错误通常表示程序在运行时无法分配足够的永久代(PermGen)内存,这对于存储类加载器的元数据和常量池等非常关键。解决这个问题的过程往往充满摸索,特别是对于初次遇到该问题的开发者来说。
首先,解决这类问题的关键在于理解PermGen空间的工作原理以及它与堆内存的区别。PermGen是Java虚拟机(JVM)的一部分,专门用于存放持久类、常量池和编译后的代码。如果应用程序频繁创建大量类或者使用了大量的静态字段,PermGen空间可能会迅速耗尽。
网络上充斥着各种解决 PermGen space溢出的方法,但并非所有建议都适用。作者提到尝试过文档《Linux和Windows修改Java虚拟机内存大小》中的方法,但未能解决问题。这表明直接调整JVM的内存参数可能不足以解决PermGen溢出,因为 PermGen的大小不是通过-Xmx或-Xms这样的堆内存选项来配置的。
作者使用JDK自带的jconsole工具对JVM内存进行监控,发现PermGen的最大值为64MB,这是默认设置。即使设置了更大的 PermSize 和 MaxPermSize 参数,但在Myeclipse中启动Tomcat时,这些配置并未生效。这是因为Myeclipse可能有自己的配置机制,或者这些设置没有正确地传递给JVM。
解决这个问题的步骤包括:
1. **理解配置**:确保对 PermGen 的特殊配置有所了解,如`XX:PermSize` 和 `XX:MaxPermSize`,它们分别设置初始和最大PermGen空间大小,而不是堆内存大小。
2. **检查启动参数**:在Myeclipse的catalina.bat文件中,需要确保设置正确。作者增加了`-XX:PermSize`和`-XX:MaxPermSize`的值,并且建议在`setJAVA_OPTS`变量后添加这些选项,以确保它们被JVM识别。
3. **排查Myeclipse设置**:Myeclipse可能有自己的内存管理配置,确认是否在IDE内部进行了额外的限制。有时,可能需要在Myeclipse的配置文件或首选项中找到并调整相应的设置。
4. **验证配置生效**:使用jconsole或其他JVM监控工具持续观察,确保新的配置已经被应用到正在运行的Tomcat实例中。
5. **性能分析**:如果以上步骤无效,可能需要进一步分析应用程序的内存使用情况,找出导致PermGen溢出的具体原因,例如是否存在大量的类创建或循环引用等问题。
总结来说,解决"OutOfMemoryError: PermGen space"需要深入理解JVM内存管理,特别是在PermGen空间的配置和监控上。通过细致的排查和调整,才能找到问题的根源并成功解决问题,尽管这个过程可能会显得痛苦,但最终找到解决方案后的成就感则是值得的。
3018 浏览量
327 浏览量
363 浏览量
939 浏览量
2815 浏览量
165 浏览量
757 浏览量
pengyonghai
- 粉丝: 2
- 资源: 1
最新资源
- 《Velocity1.4 模板使用指南中文版》
- 一些vfp实用代码如登录界面代码 打印代码
- ALV编程手册(An Easy Reference for ALV GRID CONTROL.)
- SVN操作入门指南.pdf
- 谭浩强_C++程序员设计_pdf(将各章整合都一起了)
- OpenDoc-CruiseControl.pdf
- DataWindow .net 汉化版 电子书
- 持续集成配置.pdf
- MT6228手机基带IC PDF档
- Const的所有用法by Dan Saks
- 深入浅出Struts 2.pdf
- AN INTRODUCTION TO STOCHASTIC
- web.xml详细配置说明
- javaweb ATA认证题库
- 整合Flex和Java--配置篇
- svn使用说明的PPT