淘宝直播怎么设置管理员:全方位介绍助你轻松管理直播团队
2026-06-25
2026-06-30 0
MyEclipse启动时报java.lang.OutOfMemoryError: PermGen space,是JDK 7及更早版本因永久代空间不足所致,需在Preferences→MyEclipse→Servers→Tomcat→JDK的VM参数中设置-XX:PermSize=512m -XX:MaxPermSize=1024m;JDK 8+则应改用-XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m,且必须配置在MyEclipse界面而非eclipse.ini或catalina.bat中。
java.lang.OutOfMemoryError: PermGen space这是 JDK 7 及更早版本的典型现象,本质是方法区(永久代)被类加载器反复加载的 class 填满,尤其在频繁热部署、多项目共存或使用大量反射框架(如 Spring)时极易触发。
关键不是堆内存不够,而是 -XX:MaxPermSize 设置太小。MyEclipse 自身插件多、Tomcat 加载多个 WebApp,256m 往往撑不住。
Window → Preferences → MyEclipse → Servers → Tomcat x.x → JDK → Optional Java VM arguments,填入:-XX:PermSize=512m -XX:MaxPermSize=1024mPermGen 已被 Metaspace 替代,此时要换参数:-XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512meclipse.ini 或 catalina.bat:IDE 启动 Tomcat 时,优先读取的是 MyEclipse 界面里配置的 JVM 参数,其他地方改了也无效java.lang.OutOfMemoryError: Java heap space堆内存耗尽,说明对象分配太多、GC 清不掉,或者初始堆太小导致频繁扩容再 GC,最终失败。
常见诱因是:SSM 项目里没分页查数据库、List 不断 add 对象没清空、缓存未设上限、上传大文件未流式处理。
-Xms 和 -Xmx 必须设为相同值,比如 -Xms1024m -Xmx1024m,避免运行中反复调整堆大小带来的开销和碎片-Xmx 别超过 2048m;超过会挤占系统和其他进程资源,反而引发卡顿甚至崩溃-Xmn(新生代大小),建议设为 -Xmx 的 1/3~1/4,比如 -Xmx2048m 对应 -Xmn512m,太小会导致 Minor GC 频繁,太大则老年代空间不足这不是项目的问题,是 MyEclipse 运行环境(即它自己的 JVM)内存不足。它和你跑的 Tomcat 是两个独立 JVM 进程。
症状包括:打开 .java 文件卡顿数秒、保存时报错、控制台日志刷屏但无响应、新建项目失败。
MyEclipse 安装目录/eclipse.ini,重点调 -vmargs 下的参数:-Xms1024m -Xmx2048m -XX:MaxMetaspaceSize=512m-XX:+UseG1GC 可加可不加;G1 在大堆(>4GB)下优势明显,但 MyEclipse 自身堆一般不到 2GB,CMS 或默认 GC 足够-Xmx 行(常见于手动改过多次的人),JVM 只认最后一个生效,重复反而容易写错单位(比如漏写 m)很多人调了半天,发现根本没生效——因为压根没搞清当前 OOM 发生在哪一个 JVM 上。
MyEclipse 环境里至少存在三个独立 JVM:MyEclipse 主进程、内嵌 Tomcat 进程、你用 maven build 时起的独立 JVM。每个都要单独配参数。
main 线程出错,一般是 Tomcat;Worker-xx 或没线程名但含 org.eclipse 包路径,就是 MyEclipse 自身jps -l 命令列出所有 Java 进程 PID,再用 jstat -gc 查对应堆使用率,比看日志更准eclipse.ini 没反应,检查是否用了 -vm 指向了另一个 JDK,此时 eclipse.ini 的 -vmargs 可能被忽略