笔者今天在使用ANT构建项目时,抛出了异常错误,java.lang.OutOfMemoryError:The system is out of resources。
在Ant中使用javac命令,抛出的java.lang.OutOfMemoryError错误和一般java应用抛出这个错误没两样。当执行JDK的javac命令,都是调用%JAVA_HOME%/lib/tools.jar包中com.sun.tools.javac.main.Main类。
在进行资料查阅和尝试后,发现解决一般有两种方案:
第一种:
通过修改ant的配置文件来指定虚拟机的内存大小,Window环境下修改bin目录下的ant.bat文件,可以直接在ant.bat的头文件处加上如下的指令:
set ANT_OPTS="-Xms800m -Xmx800m" ,设置的足够大,应该不会出现内存溢出的状态。(已验证,建议使用)。
第二种:
在javac节点处设置fork属性,同时指定memoryinitialsize、memorymaximumsize属性。例如:
1. <javac fork="true"
2. srcdir="${basedir}/src"
3. destdir="${basedir}/build/classes"
4. classpath="${project.classpath}"
5. memoryinitialsize="256m"
6. memorymaximumsize="256m">
7. </javac>
说明:
-fork:没有指定fork属性(默认为false),javac命令将和ant在同一个进程中执行,同时javac被分配的内存只有64MB,如果指定fork属性为true,javac命令将和ant不在同一个进程中执行,分配内存的大小将为memoryinitialsize、memorymaximumsize指定的大小。
-memoryinitialsize:javac占用的最小内存。
-memorymaximumsize:javac占用的最大内存。