Maven“线程中的异常”http-bio-8080-exec-32“java.lang.OutOfMemoryError:PermGen space”

时间:2012-06-08 13:46:24

标签: java maven netbeans permgen

我在Ubuntu 11.10下使用Struts2 + Spring和Hibernate框架在NetBeans中创建了一个项目。第一次运行是好的,但是当我第二次或第三次运行它时,我一直得到这个例外。没有Maven一切顺利。我使用apt-get install安装了maven,是的,我在export MAVEN_OPTS=-Xmx512m中添加了这一行usr/bin/mvn,但没有运气。如何从中获得更好的表现?

3 个答案:

答案 0 :(得分:5)

你应该添加这一行:

export MAVEN_OPTS="-Xmx512M -XX:MaxPermSize=512M" 

请注意,有些用户报告说双引号存在问题,因此您可能需要使用:

export MAVEN_OPTS=-Xmx512M -XX:MaxPermSize=512M 

编辑:

由于您使用的是Tomcat,请使用:

  1. 打开 tomcat / bin / catalina.sh
  2. 将此行添加到 JAVA_OPTS =“ - Djava.awt.headless = true -Dfile.encoding = UTF-8 -server -Xms512m -Xmx1024m -XX:NewSize = 256m -XX:MaxNewSize = 256m -XX :PermSize = 256m -XX:MaxPermSize = 256m -XX:+ DisableExplicitGC“
  3. 保存并退出,重新启动Tomcat
  4. More information here...

答案 1 :(得分:4)

当对象没有正确清理内存时,permgen空间通常会抛出此错误。通常导致“孤岛”的对象仍然指向他们,但你作为程序员不能访问这些参考,因为他们住在你的空间之外。你可能正在使用一个导致这个问题的库,它可能不会消失,直到你停止使用这个库。至于哪个图书馆,我不确定,有很多文章解释如何找到这个,但这是一件苦差事,可能需要一段时间,除非你很幸运。内存分析器可以提供一些想法。

good explanation article

答案 2 :(得分:3)

-Xmx512m对您没有帮助,因为您正在增加堆空间。你的PermGen空间用完了,而不是堆空间。

尝试增加PermGen空间并添加一些标记以便对其进行操作。以下是更多信息:Recurring "PermGen" in Tomcat 6