我已经在ini文件中给了eclipse大量的内存,但它仍然没有使用超过300mb的任何东西,我可以在任务管理器中看到。
[javac] The system is out of resources.
[javac] Consult the following stack trace for details.
[javac] java.lang.OutOfMemoryError: Java heap space
[javac] at com.sun.tools.javac.comp.Attr.selectSym(Attr.java:1938)
[javac] at com.sun.tools.javac.comp.Attr.visitSelect(Attr.java:1835)
[javac] at com.sun.tools.javac.tree.JCTree$JCFieldAccess.accept(JCTree.java:1522)
[javac] at com.sun.tools.javac.comp.Attr.attribTree(Attr.java:360)
[javac] at com.sun.tools.javac.comp.Attr.attribExpr(Attr.java:377)
[javac] at com.sun.tools.javac.comp.Annotate.enterAttributeValue(Annotate.java:190)
[javac] at com.sun.tools.javac.comp.Annotate.enterAnnotation(Annotate.java:167)
[javac] at com.sun.tools.javac.comp.MemberEnter.enterAnnotations(MemberEnter.java:743)
[javac] at com.sun.tools.javac.comp.MemberEnter.access$300(MemberEnter.java:42)
[javac] at com.sun.tools.javac.comp.MemberEnter$5.enterAnnotation(MemberEnter.java:711)
[javac] at com.sun.tools.javac.comp.Annotate.flush(Annotate.java:95)
[javac] at com.sun.tools.javac.comp.Annotate.enterDone(Annotate.java:87)
[javac] at com.sun.tools.javac.comp.Enter.complete(Enter.java:485)
[javac] at com.sun.tools.javac.comp.Enter.main(Enter.java:442)
[javac] at com.sun.tools.javac.main.JavaCompiler.enterTrees(JavaCompiler.java:819)
[javac] at com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:727)
[javac] at com.sun.tools.javac.main.Main.compile(Main.java:353)
[javac] at com.sun.tools.javac.main.Main.compile(Main.java:279)
[javac] at com.sun.tools.javac.main.Main.compile(Main.java:270)
[javac] at com.sun.tools.javac.Main.compile(Main.java:69)
[javac] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[javac] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
[javac] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
[javac] at java.lang.reflect.Method.invoke(Method.java:597)
[javac] at org.apache.tools.ant.taskdefs.compilers.Javac13.execute(Javac13.java:56)
[javac] at org.apache.tools.ant.taskdefs.Javac.compile(Javac.java:1065)
[javac] at org.apache.tools.ant.taskdefs.Javac.execute(Javac.java:882)
[javac] at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:288)
[javac] at sun.reflect.GeneratedMethodAccessor19.invoke(Unknown Source)
[javac] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
[javac] at java.lang.reflect.Method.invoke(Method.java:597)
[javac] at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
这是我的ini文件。
--launcher.defaultAction
openFile
--launcher.XXMaxPermSize
512M
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize1024m
--vm
C:\Program Files\Java\jdk1.6.0_24\bin\javaw.exe -vmargs -Xms512m -Xmx1024m
我不知道为什么它不会使用我给它的内存。我是否需要做任何其他事情来改变堆大小?
由于
答案 0 :(得分:18)
不是Eclipse耗尽内存,而是蚂蚁。 Ant作为eclipse的外部工具运行,因此它不会继承您用于eclipse的VM设置。您可以在外部工具运行配置中为其设置选项。转到运行 - >外部工具 - >外部工具配置...然后在“Ant Builds”下你必须查找你的ant构建,你可以在JRE选项卡中设置vm参数。
答案 1 :(得分:4)
只有当您更改以下内容时,您的eclipse.ini设置才会生效:
运行 - >外部工具 - >外部工具
配置。转到你使用的配置,在jre tab -select选项
下
Run in same JRE in workspace
这对我有用了
答案 2 :(得分:0)
请参阅this topic最佳Eclipse JVM设置
答案 3 :(得分:0)
您可以正确地将-Xms512m
-Xmx1024m
选项设置为启动构建后Eclipse将运行的Ant bin / sh脚本。
plugins > org.apache.ant_<version> > bin
修改与操作系统相关的Ant文件
对于 Windows :将此行添加到ant.bat
文件export ANT_OPTS=-Xmx512m
对于 Unix / Mac OS X :您可以直接编辑ant_exec_command
文件末尾的ant
命令或设置$ANT_ARGS
变量
答案 4 :(得分:0)
我一周前遇到了同样的问题,并且解决方案是将fork属性设置为true,以便在具有自己的堆大小设置的单独进程中运行javac。 如果fork设置为false或未设置(默认为false),则javac将在与Ant相同的进程中运行。以下是我当前build.xml的片段:
<javac fork="true"
srcdir="${basedir}/src"
.....
</javac>
将fork设置为true还会将javac实现中的任何内存泄漏限制为其自己的子进程,而不会影响父Ant进程。 我读到了这个提示here