#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, поскольку мне кажется, что он какое-то время зависает, а затем внезапно 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, создавая тот же проект с той же конфигурацией