最近我在我的Web应用程序中遇到了这个错误:
java.lang.OutOfMemoryError:PermGen空间
这是在Tomcat 6和JDK 1.6上运行的典型Hibernate/JPA + IceFaces/JSF应用程序.显然,重新部署应用程序几次后就会发生这种情况.
导致它的原因以及可以采取哪些措施来避免它?我该如何解决这个问题?
如果我从Java命令行中省略-Xmxn选项,则使用默认值.根据Java文档 "默认值是在运行时根据系统配置选择的".
哪些系统配置设置会影响默认值?
截至今天,我的maven编译失败了.
[INFO] [ERROR] Unexpected
[INFO] java.lang.OutOfMemoryError: Java heap space
[INFO] at java.util.Arrays.copyOfRange(Arrays.java:2694)
[INFO] at java.lang.String.<init>(String.java:203)
[INFO] at java.lang.String.substring(String.java:1877)
Run Code Online (Sandbox Code Playgroud)
[错误]内存不足; 要增加内存量,请在启动时使用-Xmx标志(java -Xmx128M ...)
截至昨天,我已成功运行maven编译.
截至今天,我刚刚把我的堆增加到3 GB.另外,我只更改了2-3行代码,所以我不明白这个"内存不足"的错误.
vagrant@dev:/vagrant/workspace$ echo $MAVEN_OPTS
-Xms1024m -Xmx3000m -Dmaven.surefire.debug=-Xmx3000m
Run Code Online (Sandbox Code Playgroud)
编辑:我通过更改失败的模块的pom.xml尝试了海报的评论.但我得到了相同的maven构建错误.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.5</source>
<target>1.5</target>
<fork>true</fork>
<meminitial>1024m</meminitial>
<maxmem>2024m</maxmem>
</configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud) 我已经为此阅读了所有类型的解决方案.一个链接在评论
处理"java.lang.OutOfMemoryError:PermGen space"错误
是迄今为止我发现的最好的.虽然相当复杂.
关键是,我得到这个错误只是用Maven编译一个项目.
据我所知,到目前为止还没有应用程序服务器.发生什么了?
我该怎么办?
这是我的错误:
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1:02.743s
[INFO] Finished at: Mon Sep 24 17:48:50 CEST 2012
[INFO] Final Memory: 77M/894M
[INFO] ------------------------------------------------------------------------
---------------------------------------------------
constituent[0]: file:/C:/Program%20Files%20(x86)/apache-maven-3.0.4/lib/aether-a
pi-1.13.1.jar
constituent[1]: file:/C:/Program%20Files%20(x86)/apache-maven-3.0.4/lib/aether-c
onnector-wagon-1.13.1.jar
constituent[2]: file:/C:/Program%20Files%20(x86)/apache-maven-3.0.4/lib/aether-i
mpl-1.13.1.jar
constituent[3]: file:/C:/Program%20Files%20(x86)/apache-maven-3.0.4/lib/aether-s
pi-1.13.1.jar
constituent[4]: file:/C:/Program%20Files%20(x86)/apache-maven-3.0.4/lib/aether-u
til-1.13.1.jar
constituent[5]: file:/C:/Program%20Files%20(x86)/apache-maven-3.0.4/lib/commons-
cli-1.2.jar
constituent[6]: file:/C:/Program%20Files%20(x86)/apache-maven-3.0.4/lib/maven-ae
ther-provider-3.0.4.jar
constituent[7]: file:/C:/Program%20Files%20(x86)/apache-maven-3.0.4/lib/maven-ar
tifact-3.0.4.jar
constituent[8]: file:/C:/Program%20Files%20(x86)/apache-maven-3.0.4/lib/maven-co
mpat-3.0.4.jar
constituent[9]: file:/C:/Program%20Files%20(x86)/apache-maven-3.0.4/lib/maven-co
re-3.0.4.jar
constituent[10]: file:/C:/Program%20Files%20(x86)/apache-maven-3.0.4/lib/maven-e
mbedder-3.0.4.jar
constituent[11]: file:/C:/Program%20Files%20(x86)/apache-maven-3.0.4/lib/maven-m
odel-3.0.4.jar
constituent[12]: file:/C:/Program%20Files%20(x86)/apache-maven-3.0.4/lib/maven-m
odel-builder-3.0.4.jar
constituent[13]: file:/C:/Program%20Files%20(x86)/apache-maven-3.0.4/lib/maven-p
lugin-api-3.0.4.jar
constituent[14]: …Run Code Online (Sandbox Code Playgroud) 我正在使用Maven 3.3.3。我有 <fork>true</fork>。我遇到了问题(MojoException)并通过注释掉了它
<fork>true</fork>
<compilerVersion>${java.version}</compilerVersion>
Run Code Online (Sandbox Code Playgroud)
我的项目使用Java 1.6,上一行中的java.version引用了1.6,但是我的计算机环境变量为1.7,而maven 3.3.3需要Java 1.7。现在,我的问题已解决。
但是我听不懂1)fork在这里是什么意思?2)它是做什么的?3)将其设置为true或false,会发生什么变化?
我浏览了文档,但是很难遵循。谢谢。
如果我正在构建投影使用:
mvn安装
我看到以下内容:
[ERROR] COMPILATION ERROR :
[INFO] -------------------------------------------------------------
[ERROR] Failure executing javac, but could not parse the error:
The system is out of resources.
Consult the following stack trace for details.
java.lang.OutOfMemoryError: PermGen space
Run Code Online (Sandbox Code Playgroud)
我不确定在哪里更新我的java选项?
我在ubuntu上运行它.
maven ×4
java ×3
permgen ×2
pom.xml ×2
exception ×1
heap ×1
heap-memory ×1
java-6 ×1
maven-3 ×1
memory-leaks ×1