Исключение верхнего уровня: достигнут предел накладных расходов GC. Сборка Android Maven

#java #android #maven #garbage-collection #dex

#java #Android #maven #сбор мусора #dex

Вопрос:

Я периодически получаю неожиданное исключение верхнего уровня: достигнут предел накладных расходов GC или иногда Java из кучи при создании приложения для Android с использованием Maven.

Эта проблема начала возникать только после того, как я обновился до Windows 10 (с Windows 8 работал без проблем в Windows 8). Проект отлично работает примерно на 20 других машинах (под управлением разных версий macOS, Linux, Windows и т.д.) и прерывается только на моей машине

Я попытался установить для переменной MAVEN_OPTS -Xmx env значение 2048m 4096m 1024m или просто оставить его, но это не имеет значения. Я также пытался отключить проверку ограничения накладных расходов GC, но это также не сработало

Эта проблема возникает, когда выполняется часть сборки dex, и происходит только примерно в половине случаев. В основном половину времени он строит нормально, а в другой половине времени он выходит из строя либо с достигнутым пределом накладных расходов GC, либо с Java из кучи.

Я использую Java jdk1.8.0_101

Apache Maven 3.3.9

Будем признательны за любую помощь в решении этой проблемы

Редактировать

Я запустил профилировщик и в итоге получил сбой с:

Ошибка неперехваченного перевода: java.util.concurrent.Исключение ExecutionException: java.lang.Ошибка OutOfMemoryError: превышен лимит накладных расходов GC

Скриншот профилировщика: Скриншот профиля Dex

Я не уверен, что вызывает это в процессе dex, поскольку мне кажется, что он какое-то время зависает, а затем внезапно GC просто переходит в перегрузку

Комментарии:

1. Вы использовали профилировщик, такой как JVisualVM, чтобы увидеть, что происходит во время сборки?

2. Нет, я попробую

3. Пожалуйста, попробуйте собрать дамп кучи в ООМ и посмотреть, что там есть, добавив следующее к вариантам -XX: HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=...

Ответ №1:

Добавление этого в мой POM в конфигурации плагина android maven устранило проблему для меня

 <dex>
    <jvmArguments>
      <jvmArgument>-Xms2048m</jvmArgument>
      <jvmArgument>-Xmx4096m</jvmArgument>
    </jvmArguments>
</dex>
 

Лучшее объяснение, которое я мог придумать

Итак, после просмотра всего, казалось, проблема с памятью. Процессу dex было выделено 1,6 Гб памяти JVM, чего иногда было достаточно, но в некоторых случаях по какой-либо причине требовалось немного больше. Я предполагаю, что это заставило его попытаться запустить GC для освобождения памяти, что привело к достижению предела накладных расходов GC. В других случаях это просто выдало бы ошибку вне кучи. Несмотря на то, что процесс Dex с большим объемом памяти устранил мою проблему. На заметку. Я никогда не сталкивался с этой проблемой до Windows 10, создавая тот же проект с той же конфигурацией