简体   繁体   English

构建失败java.lang.OutOfMemoryError:Java堆空间

[英]Build Failed java.lang.OutOfMemoryError: Java heap space

I am facing this issue while building my build.xml. 我在构建build.xml时遇到了这个问题。

BUILD FAILED
java.lang.OutOfMemoryError: Java heap space
    at java.util.Arrays.copyOf(Arrays.java:2786)
    at java.io.ByteArrayOutputStream.write(ByteArrayOutputStream.java:94)
    at org.codehaus.cargo.module.DefaultJarArchive.<init>(DefaultJarArchive.
java:75)
    at org.codehaus.cargo.module.DefaultJarArchive.<init>(DefaultJarArchive.
java:56)
    at org.codehaus.cargo.module.webapp.DefaultWarArchive.<init>(DefaultWarA
rchive.java:69)
    at org.apache.cactus.integration.ant.CactifyWarTask.addJarWithClass(Cact
ifyWarTask.java:652)
    at org.apache.cactus.integration.ant.CactifyWarTask.addCactusJars(Cactif
yWarTask.java:627)
    at org.apache.cactus.integration.ant.CactifyWarTask.execute(CactifyWarTa
sk.java:519)
    at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:288)
    at sun.reflect.GeneratedMethodAccessor31.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.jav
a:106)
    at org.apache.tools.ant.Task.perform(Task.java:348)
    at org.apache.tools.ant.taskdefs.Sequential.execute(Sequential.java:62)
    at net.sf.antcontrib.logic.IfTask.execute(IfTask.java:197)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.jav
a:106)
    at org.apache.tools.ant.TaskAdapter.execute(TaskAdapter.java:154)
    at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:288)
    at sun.reflect.GeneratedMethodAccessor31.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.jav
a:106)
    at org.apache.tools.ant.Task.perform(Task.java:348)
    at org.apache.tools.ant.Target.execute(Target.java:357)
    at org.apache.tools.ant.Target.performTasks(Target.java:385)
    at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1337)
    at org.apache.tools.ant.Project.executeTarget(Project.java:1306)

It sounds like you need to launch your JVM with a larger memory limit. 听起来你需要启动具有更大内存限制的JVM。 Try something like (if you're using Bourne shell): 尝试类似的东西(如果你使用的是Bourne shell):

export ANT_OPTS=-Xmx1g
ant

or, if you use cmd under Windows: 或者,如果您在Windows下使用cmd

set ANT_OPTS=-Xmx1g
ant

Above, the 1g means 1 GB. 以上, 1g表示1 GB。 You can tweak that to whatever you like; 你可以随意调整它; for example, if you want to use 1.5 GB, you can use -Xmx1536m . 例如,如果要使用1.5 GB,则可以使用-Xmx1536m

(For < Java 8, permgen doesn't apply to Java 8 and up) (对于<Java 8,permgen不适用于Java 8及更高版本)

For benefit of those who got a similar trace with the word "PermGen" in the Error message, 为了在错误消息中使用“PermGen”一词获得类似跟踪的用户,

java.lang.OutOfMemoryError: PermGen space

Increasing the perm-gean space in ANT_OPTS (preferably, though not necessarily along with the Max heap size) should solve the issue 增加ANT_OPTS中的perm-gean空间(最好,但不一定与最大堆大小一起)应解决问题

example

export ANT_OPTS="-Xmx2g -XX:MaxPermSize=512m"

Adjust the numbers as per your your need. 根据您的需要调整数字。

Cheers! 干杯!

If 'javac' task is used with fork option then , javac will run in his own process and memory should be directly assigned to the javac using 'memoryinitialsize' and 'memorymaximumsize': 如果'javac'任务与fork选项一起使用,那么javac将在他自己的进程中运行,并且应该使用'memoryinitialsize'和'memorymaximumsize'将内存直接分配给javac:

javac   srcdir="${src}"
            destdir="${classes}"
            source="1.6"
            debug="true"
            fork="true"
            deprecation="off"
            memoryinitialsize="512m"
            memorymaximumsize="1024m"

You need to set ANT_OPTS to next higher level in dx.bat file.which is located \\build-tools\\versions\\dx.bat. 您需要在位于\\ build-tools \\ versions \\ dx.bat的dx.bat文件中将ANT_OPTS设置为下一个更高级别。 set defaultXmx=-Xmx2048M I set it to 2GB. 设置defaultXmx = -Xmx2048M我将其设置为2GB。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM