2011-09-21 35 views
19

Tôi đang gặp vấn đề này trong khi xây dựng tệp build.xml của mình.Không xây dựng được java.lang.OutOfMemoryError: Vùng heap Java

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) 

Trả lời

50

Có vẻ như bạn cần khởi chạy JVM với giới hạn bộ nhớ lớn hơn. Hãy thử một cái gì đó tương tự (nếu bạn đang sử dụng Bourne shell):

export ANT_OPTS=-Xmx1g 
ant 

hoặc, nếu bạn sử dụng cmd trong môi trường Windows:

set ANT_OPTS=-Xmx1g 
ant 

Ở trên, các 1g nghĩa 1 GB. Bạn có thể tinh chỉnh điều đó theo bất kỳ thứ gì bạn thích; ví dụ: nếu bạn muốn sử dụng 1,5 GB, bạn có thể sử dụng -Xmx1536m.

+0

Tôi nên thêm tập hợp ANT_OPTS = -Xmx1g kiến ​​vào tệp tập lệnh kiến ​​?? – vibhas

+0

Chạy lệnh đó trước khi bạn gõ 'ant'. Tôi giả định rằng bạn đang chạy 'ant' từ dòng lệnh. Nếu bạn đang chạy kiến ​​từ một IDE, IDE của bạn sẽ cung cấp cho bạn một cách để chuyển các tùy chọn Java. –

+1

Xin cảm ơn rất nhiều !! Nó hoạt động – vibhas

6

Nếu nhiệm vụ 'javac' được sử dụng với tùy chọn ngã ba rồi, javac sẽ chạy trong quá trình và bộ nhớ riêng của mình nên được chỉ định trực tiếp đến javac sử dụng 'memoryinitialsize' và 'memorymaximumsize':

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

Chắc chắn điều này giải quyết được vấn đề cho nhiệm vụ 'javac' – emrahkocaman

9

(Đối với < Java 8, PermGen không áp dụng cho Java 8 trở lên)

cho lợi ích của những người có một dấu vết tương tự với từ "PermGen" trong thông báo lỗi,

java.lang.OutOfMemoryError: PermGen space 

Tăng không gian perm-Gean trong ANT_OPTS (tốt, mặc dù không nhất thiết phải cùng với kích thước heap Max) nên giải quyết vấn đề

dụ

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

Điều chỉnh số theo nhu cầu của bạn.

Chúc mừng!

+2

-XX: MaxPermSize = 512m đã giải quyết được vấn đề! Cảm ơn –

0

Bạn cần đặt ANT_OPTS thành cấp cao hơn tiếp theo trong tệp dx.bat.đó nằm \ build-tools \ versions \ dx.bat. đặt defaultXmx = -Xmx2048M Tôi đặt thành 2GB.

Các vấn đề liên quan