Как правильно установить ANT_OPTS в OS X? - PullRequest
3 голосов
/ 01 сентября 2009

Я сталкиваюсь с «Ошибка: пространство кучи Java, java.lang.OutOfMemoryError: пространство кучи Java» при компиляции существующего проекта в OS X (Snow Leopard).

Я использую Java 1.6 64-bit SDK по умолчанию и установку Ant по умолчанию (оба предоставляются как часть ОС).

Я сталкивался с этой проблемой в других средах ОС и обычно решаю ее, используя ANT_OPTS для увеличения выделенной памяти, но это не похоже на работу.

Я попытался установить ANT_OPTS следующим образом:

В ту же оболочку я ввел

export ANT_OPTS = "- Xmx1024m ' муравейник

Я также попытался установить значение в ~ / .bash_profile (которое я нашел, чтобы убедиться, что оно было выбрано).

Я в конечном итоге решил проблему с памятью, увеличив память в задаче javac в моем скрипте Ant, но это не идеально (я бы предпочел использовать ANT_OPTS).

Как правильно увеличить объем памяти кучи при запуске Ant в OS X?

ОБНОВЛЕНИЕ:

Кажется, я ошибся, и ANT_OPTS принимается как исключение. Проблема в том, что я разветвляю задачу javac (как описано ниже в bkail).

Что приводит меня к моему следующему вопросу. Почему процессу JAVAC не хватает памяти в OSX, когда тот же самый скрипт / ant работает в Linux? Чем отличается установка Java по умолчанию для OSX, что означает, что для нее требуется дополнительная память?

Ответы [ 2 ]

2 голосов
/ 01 сентября 2009

Если настройка javac memoryMaximumSize оказывает какое-либо влияние, то ваш javac должен иметь значение fork = "true", что означает, что JVM javac отделена от JVM Ant, что означает, что ваш ANT_OPTS не будет влиять на JVM javac. Вам нужно будет вручную распространять параметр -Xmx. Примерно так:

<project>
  <script language="javascript"><![CDATA[
    importClass(java.lang.Runtime)
    project.setProperty("memoryMaximumSize", Runtime.getRuntime().maxMemory());
  ]]></script>
  <javac srcdir="." memoryMaximumSize="${memoryMaximumSize}" fork="true"/>
</project>

ant -verbose подтверждает, что настройка распространяется на разветвленный javac:

[javac] Compilation arguments:
[javac] '-J-Xmx520290304'
1 голос
/ 02 сентября 2009

Чтобы ответить на обновленный вопрос, максимальная куча по умолчанию варьируется в зависимости от того, классифицирует ли JVM систему как «клиент» или «сервер». Если классифицируется как «сервер», то максимальная куча по умолчанию варьируется в зависимости от доступной памяти в системе. Смотрите здесь для получения дополнительной информации:

http://java.sun.com/docs/hotspot/gc5.0/ergo5.html

Java-версия должна показывать, какая виртуальная машина выбрана:

java version "1.6.0_13"
Java(TM) SE Runtime Environment (build 1.6.0_13-b03)
Java HotSpot(TM) Client VM (build 11.3-b02, mixed mode, sharing)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...