两类旧错误都包含内存不足,却不该使用同一份参数模板:一类发生在 Eclipse 构建工作空间时,另一类发生在它启动的应用中。
先确认哪一个进程报错
An internal error occurred during: "Building workspace".
Java heap space
这类提示需要关注 Eclipse 自身的 JVM。eclipse.ini 中的 JVM 参数应位于 -vmargs 之后;下面仅演示堆参数位置,不是推荐所有机器使用的容量:
-vmargs
-Xms256m
-Xmx1024m
修改时保留已有必要选项,不要用这个片段覆盖整个文件。实际 JVM 选择及启动参数规则可查 Eclipse 启动说明。
如果错误来自 Run/Debug 启动的 Java 应用,则应检查该启动配置 Arguments 页的 VM Arguments。修改 eclipse.ini 不会自动把同一组参数传给应用。Eclipse 应用执行参数
堆与永久代不是同一块空间
-Xms、-Xmx 控制堆的初始和最大容量。旧 HotSpot 中的 OutOfMemoryError: PermGen space 涉及永久代,历史上有 PermSize、MaxPermSize 等选项,但它们不是堆参数。
JDK 8 已移除永久代,类元数据主要转移到本地内存中的 Metaspace,不能把旧永久代选项原样用于当前 JDK。Metaspace 耗尽也不是单纯增加 Xmx 就能解决。OpenJDK JEP 122
增大上限后仍要观察
先确认实际进程、Java 版本、生效参数和机器可用内存,再评估合理上限。容量不足、插件异常、对象长期保留和类加载器泄漏,需要不同证据。
提高上限可能缓解问题,却不能证明没有泄漏。对于持续增长或反复出现的错误,应在安全环境收集相应诊断,结合工作负载分析;不要把某个固定 MB 数值当作大项目的通用答案。