Ale*_*oso 29 java garbage-collection scala out-of-memory maven
运行类时,我有以下异常:
线程"main"中的异常java.lang.OutOfMemoryError:超出了GC开销限制
我试图从类包的maven pom.xml中增加jvmArg堆大小:
http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0
<parent>
(...)
</parent>
<artifactId>(...)</artifactId>
<name>(...)</name>
<properties>
<javaOpts.Xmx>4g</javaOpts.Xmx> <!-- default that can be adjusted on the command line with -DjavaOpts.Xmx=... -->
<(...).basedir>${project.basedir}/..</(...).basedir>
</properties>
<build>
<plugins>
<plugin>
<groupId>net.alchim31.maven</groupId>
<artifactId>scala-maven-plugin</artifactId>
<configuration>
<launchers>
<launcher>
<id>MyClassName</id>
<mainClass>(...)</mainClass>
<jvmArgs>
<jvmArg>-Xmx${javaOpts.Xmx}</jvmArg>
(...)
Run Code Online (Sandbox Code Playgroud)
我已经尝试了最后引用的行,其中包含许多值:
<jvmArg>-Xmx512m{javaOpts.Xmx}</jvmArg><jvmArg>-Xmx4096M{javaOpts.Xmx}</jvmArg><jvmArg>-Xmx10000000000M{javaOpts.Xmx}</jvmArg>但对于他们所有人我都有同样的错误.
有人可以帮帮我吗?观察:我正在从IntelliJ IDEA运行.
fla*_*ian 43
Java 7
这不是Maven问题,您需要为VM提供更多内存.您可以通过环境变量执行此操作,Maven Launcher将在加载时自动获取这些设置,并使用它们来配置底层Java VM.
这样做的简单方法是:
export MAVEN_OPTS="-Xmx1024M -Xss128M -XX:MaxPermSize=1024M -XX:+CMSClassUnloadingEnabled"
视窗:
set MAVEN_OPTS=-Xmx1024M -Xss128M -XX:MaxPermSize=1024M -XX:+CMSClassUnloadingEnabled
(没有双引号)
Java 8
Java 8用元空间替换了永久代,新设置如下所示:
export MAVEN_OPTS="-Xmx1024M -Xss128M -XX:MetaspaceSize=512M -XX:MaxMetaspaceSize=1024M -XX:+CMSClassUnloadingEnabled"
我遇到了同样的问题:我的项目wokspace由250个以上的maven模块组成,当pom.xml在IDEA中打开时,将<project>and <parent>标记加红色下划线,并将鼠标悬停在损坏的标记上时会显示此错误:
java.lang.OutOfMemoryError:超出了GC开销限制
我的解决方案:
>Settings >Build, Execution, Deployment >Build Tools >Maven >Importing-例如,-Xmx1g 和>Settings >Build, Execution, Deployment >Build Tools >Maven(Maven主目录)下的Maven实现从(Bundled) Maven 3更改为我的本地Maven安装(而不是与IDEA捆绑在一起的安装),例如/opt/maven/apache-maven-3.3.9:
由于以前我对捆绑的Maven遇到问题,所以我不信任捆绑的Maven。
小智 5
将并行垃圾回收添加到上面的最高答案可能是最好的选择:
-Xmx2048M -Xss128M -XX:MaxPermSize=2048M -XX:+CMSClassUnloadingEnabled -XX:+UseConcMarkSweepGC
Run Code Online (Sandbox Code Playgroud)