Подтвердить что ты не робот

Javac: java.lang.OutOfMemoryError при запуске ant из Eclipse

Я дал нагрузкам памяти для затмения в 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

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

Спасибо

4b9b3361

Ответ 1

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

Ответ 2

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

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

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

Run in same JRE in workspace



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

Ответ 3

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

Ответ 4

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

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

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

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

Ответ 5

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

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

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