java.lang.OutOfMemoryError : PermGen space 错误

标签 java eclipse tomcat heap-memory

问题: 我正在为我的 spring 应用程序使用 eclipse-helios 和 Tomcat 6 并获得

java.lang.OutOfMemoryError: PermGen space  

每当我调试我的应用程序时

我试过了

  1. 添加

    -vmargs -Dosgi.requiredJavaVersion=1.5 -Xms512m -Xmx1024m -XX:MaxPermSize=1204m -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled
    eclipse.ini

  2. tomcat_home/bin中创建setenv.shsetenv.bat,内容如下

    设置 JAVA_OPTS="-Xms256m -Xmx512m -XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled"

  3. 在 Eclipse 中手动运行垃圾收集器。我通过

    启用了这个选项

    Window -> Preferences -> General -> 然后选择always run in background and show heap status

  4. 重启 Tomcat 一百次。

  5. 重新启动 eclipse,有时当挫败感超出限制时重新启动我的机器..

最好的部分是我仍然得到错误。 有什么我应该尝试的解决方案吗?


我尝试运行其他应用程序,但仍然遇到同样的错误,恕我直言,我的应用程序太小而不会导致错误,而且我的应用程序在我同事的设置上运行良好。

最佳答案

您的前 3 个选项针对 2 个不同的 JVM。选项 #1 和 #3 修改 eclipse JVM 实例,这是管理您的 IDE 的 JVM。选项 #2 修改 Tomcat JVM 实例。这就是为什么在启动 eclipse 和 Tomcat(假设它们是唯一运行的 Java 应用程序)时,您会在任务管理器中看到两个 java.exe 文件(如果是 Windows)。

重要的是要了解 eclipse WTP(在我的例子中是 Indigo)提供的 Tomcat 插件不会调用外部(依赖于操作系统)脚本来启动/停止 Tomcat。相反,它们直接通过命令行 (java.exe ...) 生成 Tomcat JVM。如果要修改从 eclipse 中启动的 Tomcat 实例的 JVM 参数,则需要修改相应的 Run Configuration。尝试在那里修改 JVM 参数,它应该可以工作(见屏幕截图)。 enter image description here

关于java.lang.OutOfMemoryError : PermGen space 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7387537/

相关文章:

java - 在 JSF 中使用 Facades 模式,仅在一个实体中,实体管理器为 Null

java - Slick2d map NullPointerException

java - Hibernate 可以在不包含某些行的情况下选择连接表吗

session - Tomcat session 复制

java - 如何在 sonarqube 5.1+ 中添加自定义规则

c++ - 为什么 Codan 找不到 size_t

Java文档模板

java - Eclipse 包资源管理器对每种文件类型都有不同的图标 : interfaces, 抽象类等

Spring MVC 将上传的 MultipartFile 保存到特定文件夹

apache tomcat文件仅在 session 认证jsp后下载