Maven 构建中的“java.lang.OutOfMemoryError: PermGen space”

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/3101128/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-13 16:27:43  来源:igfitidea点击:

"java.lang.OutOfMemoryError: PermGen space" in Maven build

javamavenout-of-memorypermgen

提问by Gandalf StormCrow

I'm getting this error while building Maven project, I increased MAVEN_OPTS but all the same, I found some similar posts but they are refering to something else. How do I fix this?

我在构建 Maven 项目时遇到了这个错误,我增加了 MAVEN_OPTS 但还是一样,我发现了一些类似的帖子,但他们指的是别的东西。我该如何解决?

The system is out of resources.
Consult the following stack trace for details.
java.lang.OutOfMemoryError: PermGen space
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClassCond(ClassLoader.java:632)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:616)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
        at java.net.URLClassLoader.access
export MAVEN_OPTS="-Xmx512m -XX:MaxPermSize=128m"
0(URLClassLoader.java:58) at java.net.URLClassLoader.run(URLClassLoader.java:197) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:190) at org.codehaus.plexus.compiler.javac.IsolatedClassLoader.loadClass(IsolatedClassLoader.java:56) at com.sun.tools.javac.comp.Annotate.<init>(Annotate.java:52) at com.sun.tools.javac.comp.Annotate.instance(Annotate.java:36) at com.sun.tools.javac.jvm.ClassReader.<init>(ClassReader.java:215) at com.sun.tools.javac.jvm.ClassReader.instance(ClassReader.java:168) at com.sun.tools.javac.main.JavaCompiler.<init>(JavaCompiler.java:293) at com.sun.tools.javac.main.JavaCompiler.instance(JavaCompiler.java:72) at com.sun.tools.javac.main.Main.compile(Main.java:340) at com.sun.tools.javac.main.Main.compile(Main.java:279) at com.sun.tools.javac.main.Main.compile(Main.java:270) at com.sun.tools.javac.Main.compile(Main.java:87) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.codehaus.plexus.compiler.javac.JavacCompiler.compileInProcess(JavacCompiler.java:420) at org.codehaus.plexus.compiler.javac.JavacCompiler.compile(JavacCompiler.java:141) at org.apache.maven.plugin.AbstractCompilerMojo.execute(AbstractCompilerMojo.java:493) at org.apache.maven.plugin.CompilerMojo.execute(CompilerMojo.java:114) at org.apache.maven.plugin.DefaultPluginManager.executeMojo(DefaultPluginManager.java:490) at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:694) at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalWithLifecycle(DefaultLifecycleExecutor.java:556) at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoal(DefaultLifecycleExecutor.java:535)

I'm not as worried about how to fix as to how to fix it in the maven ecosystem

我不担心如何修复,而是如何在 maven 生态系统中修复它

采纳答案by Arun R

When you say you increased MAVEN_OPTS, what values did you increase? Did you increase the MaxPermSize, as in example:

当你说你增加了MAVEN_OPTS,你增加了什么值?您是否增加了MaxPermSize,例如:

set MAVEN_OPTS=-Xmx512m -XX:MaxPermSize=128m

(or on Windows:)

(或在 Windows 上:)

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.2</version>
    <configuration>
      <fork>true</fork>
      <meminitial>128m</meminitial>
      <maxmem>1024m</maxmem>
      <compilerArgs>
        <arg>-XX:MaxPermSize=256m</arg>
      </compilerArgs>
    </configuration>
  </plugin>

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.18</version>
    <configuration>
        <forkCount>1</forkCount>
        <argLine>-Xmx1024m -XX:MaxPermSize=256m</argLine>
    </configuration>
</plugin>

You can also specify these JVM options in each maven project separately.

您还可以在每个 Maven 项目中分别指定这些 JVM 选项。

回答by duffymo

Increase the size of your perm space, of course. Use the -XX:MaxPermSize=128moption. Set the value to something appropriate.

当然,增加烫发空间的大小。使用该-XX:MaxPermSize=128m选项。将值设置为适当的值。

回答by eckes

If you want to make this part of your POM for a repeatable build, you can use the fork-variant of a few of the plugins (especially compiler:compileand surefire:test):

如果您想将 POM 的这一部分用于可重复构建,您可以使用一些插件的 fork 变体(尤其是compiler:compilesurefire:test):

use below command first 

$ export MAVEN_OPTS="-Xmx512m -Xss32m"

then use your mvn command to clean install /build war file

$ mvn clean install

NOTE: you don't need -XX:MaxPermSize argument in MAVEN_OPTS when your are using jdk1.8
Java HotSpot(TM) Client VM warning: ignoring option MaxPermSize=XXXm; support was removed in 8.0

回答by mkumar0304

I have found a solution of git bash command when you try to build war using git mvn clean install for “java.lang.OutOfMemoryError: PermGen space” in Maven build error come

当您尝试使用 git mvn clean install 为“java.lang.OutOfMemoryError: PermGen space”构建战争时,我找到了 git bash 命令的解决方案,在 Maven 构建错误来了

Edit system environment variables - > Edit Variables -> New

回答by ?MER TA?CI

When I encountered this exception, I solved this by using Run Configurations... panel as picture shows below.Especially, at JRE tab, the VM Arguments are the critical
( "-Xmx1024m -Xms512m -XX:MaxPermSize=1024m -XX:PermSize=512m").

当我遇到这个异常时,我通过使用 Run Configurations... 面板解决了这个问题,如下图所示。特别是,在 JRE 选项卡中,VM Arguments 是关键
“-Xmx1024m -Xms512m -XX:MaxPermSize=1024m -XX:PermSize =512m”)。

enter image description here

在此处输入图片说明

回答by Ranjit

We face this error when permanent generation heap is full and some of us we use command prompt to build our maven project in windows. since we need to increase heap size, we could set our environment variable @ControlPanel/System and Security/System and there you click on Change settingand select Advanced and set Environment variable as below

当永久代堆已满时,我们会遇到此错误,并且我们中的一些人使用命令提示符在 Windows 中构建我们的 maven 项目。由于我们需要增加堆大小,我们可以设置我们的环境变量@ControlPanel/System 和 Security/System,然后单击 更改设置并选择高级并设置环境变量,如下所示

  • Variable-name : MAVEN_OPTS
  • Variable-value : -XX:MaxPermSize=128m
  • 变量名:MAVEN_OPTS
  • 变量值:-XX:MaxPermSize=128m

回答by Xelian

This very annoying error so what I did: Under Windows:

这个非常烦人的错误所以我做了什么:在 Windows 下:

MAVEN_OPTS
-Xms512m -Xmx2048m -XX:MaxPermSize=512m

then fill

然后填写

##代码##

enter image description here

在此处输入图片说明

Then restart the console and run the maven build again. No more Maven space/perm size problems.

然后重新启动控制台并再次运行 Maven 构建。不再有 Maven 空间/烫发大小问题。