javac: java.lang.OutOfMemoryError при запуске муравья из Eclipse - PullRequest
12 голосов
/ 07 апреля 2011

Я дал много памяти для затмения в INI-файле, но он по-прежнему не использует ничего, кроме 300 МБ, что я вижу в диспетчере задач.

  [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

Понятия не имею, почему он не использует память, которую я ему даю. Нужно ли что-то еще делать, чтобы изменить размер кучи?

Спасибо

Ответы [ 5 ]

18 голосов
/ 07 апреля 2011

Не Eclipse не хватает памяти, но муравей. Ant запускается из Eclipse как внешний инструмент, поэтому он не наследует настройки виртуальной машины, которые вы используете для Eclipse. Вы можете установить параметры для этого в конфигурации запуска внешнего инструмента. Перейдите в «Выполнить» -> «Внешние инструменты» -> «Конфигурации внешних инструментов». Затем в разделе «Сборки Ant» вам нужно найти свою сборку ant и установить аргументы vm на вкладке JRE.

4 голосов
/ 07 апреля 2011

Ваши настройки eclipse.ini вступят в силу, только если вы измените следующее:

Выполнить -> Внешние инструменты -> Внешний инструмент

Конфигурация. перейдите в конфигурацию, которую вы используете, под вкладкой jre -select

Run in same JRE in workspace



это сработало 4 меня

0 голосов
/ 11 ноября 2013

У меня была такая же проблема неделю назад, и в качестве решения для атрибута fork было установлено значение true, чтобы запускать javac в отдельном процессе с собственными настройками размера кучи.Если для fork задано false или не установлено (по умолчанию false), javac будет работать в том же процессе, что и Ant.Ниже приведен фрагмент моего текущего файла build.xml:

<javac fork="true"
       srcdir="${basedir}/src"
       .....
</javac>

Установка для параметра true значения true также ограничит любые утечки памяти в реализации javac собственным дочерним процессом, не затрагивая родительский процесс Ant.Я читал об этой подсказке здесь

0 голосов
/ 02 сентября 2013

Можно правильно установить параметры -Xms512m -Xmx1024m для сценария Ant bin / sh, который Eclipse будет запускать после запуска сборки.

  1. Перейти в папку Eclipse
  2. Перейти к plugins > org.apache.ant_<version> > bin
  3. Изменить связанный с ОС файл Ant

    • Для Windows : добавить эту строку в ant.bat file export ANT_OPTS=-Xmx512m

    • Для Unix / Mac OS X : вы можете напрямую редактировать команду ant_exec_command в конце файла или настройки antпеременная $ANT_ARGS

0 голосов
/ 07 апреля 2011

См. в этой теме с лучшими настройками Eclipse JVM

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...