Eclipse JDT Batch Compiler OutOfMemoryError

时间:2014-06-06 17:59:15

标签: java eclipse javac eclipse-jdt

我正在尝试使用多线程编译器来减少构建的持续时间,我发现eclipse JDT Batch Compiler就是这样做的。

当我切换到JDT编译器时,我得到一个OutOfMemoryError。增加堆大小没有帮助。

java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
...
Caused by: java.lang.OutOfMemoryError: Java heap space
        at java.io.BufferedReader.<init>(BufferedReader.java:80)
        at java.io.BufferedReader.<init>(BufferedReader.java:91)
...

以下是build.xml的相关部分。

<property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/>
<javac srcdir="${env.BUILDSRC}" 
       destdir="${env.BUILDBIN}" 
       includeantruntime="false"
       debug="on" 
       deprecation="no" 
       target="1.6" 
       source="1.6"
       fork="true" 
       executable="/opt/java/jdk1.6.0_65_64bit/bin/javac"
       memoryInitialSize="1024M"
       memoryMaximumSize="2560M"
>
<compilerarg compiler="org.eclipse.jdt.core.JDTCompilerAdapter" line="-1.6"/>

1 个答案:

答案 0 :(得分:0)

JDTCompilerAdapter不支持&#39; fork&#39;因此它在运行ant的同一进程中进行编译。从输出中可以看出这一点:

  

由于编译器设置不是经典或现代的,因此忽略fork设置。

你必须增加分配给ant的内存使用量,我是用ANT_OPTS做的:

导出ANT_OPTS =&#34; -Xmx3584M&#34;