Myeclipse与Tomcat环境下解决OutOfMemoryError: PermGen space的痛苦与收获
需积分: 10 100 浏览量
更新于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空间的配置和监控上。通过细致的排查和调整,才能找到问题的根源并成功解决问题,尽管这个过程可能会显得痛苦,但最终找到解决方案后的成就感则是值得的。
2018-04-23 上传
点击了解资源详情
2020-08-26 上传
2013-08-23 上传
103 浏览量
2023-03-16 上传
2015-06-08 上传
pengyonghai
- 粉丝: 2
- 资源: 1
最新资源
- JHU荣誉单变量微积分课程教案介绍
- Naruto爱好者必备CLI测试应用
- Android应用显示Ignaz-Taschner-Gymnasium取消课程概览
- ASP学生信息档案管理系统毕业设计及完整源码
- Java商城源码解析:酒店管理系统快速开发指南
- 构建可解析文本框:.NET 3.5中实现文本解析与验证
- Java语言打造任天堂红白机模拟器—nes4j解析
- 基于Hadoop和Hive的网络流量分析工具介绍
- Unity实现帝国象棋:从游戏到复刻
- WordPress文档嵌入插件:无需浏览器插件即可上传和显示文档
- Android开源项目精选:优秀项目篇
- 黑色设计商务酷站模板 - 网站构建新选择
- Rollup插件去除JS文件横幅:横扫许可证头
- AngularDart中Hammock服务的使用与REST API集成
- 开源AVR编程器:高效、低成本的微控制器编程解决方案
- Anya Keller 图片组合的开发部署记录