问题: 我正在为我的 spring 应用程序使用 eclipse-helios 和 Tomcat 6 并获得
java.lang.OutOfMemoryError: PermGen space
每当我调试我的应用程序时
我试过了
添加
-vmargs -Dosgi.requiredJavaVersion=1.5 -Xms512m -Xmx1024m -XX:MaxPermSize=1204m -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled
到eclipse.ini
在
tomcat_home/bin
中创建setenv.sh
和setenv.bat
,内容如下设置 JAVA_OPTS="-Xms256m -Xmx512m -XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled"
在 Eclipse 中手动运行垃圾收集器。我通过
启用了这个选项Window -> Preferences -> General -> 然后选择always run in background and show heap status
重启 Tomcat 一百次。
重新启动 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 参数,它应该可以工作(见屏幕截图)。
关于java.lang.OutOfMemoryError : PermGen space 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7387537/