После обновления до Gradle 5 и Android Plugin 3.3 моя сборка с Metaspace не удалась.

Это произошло, когда я обновился до Gradle 5.0 с 4.10.3, а также с плагина Android Gradle с 3.2.1 до 3.3.0-rc03 (последнее, потому что это первая версия AGP, официально поддерживающая Gradle 5).

Когда я пытаюсь синхронизировать свой проект после этого, я получаю сообщение об ошибке. Ошибка только говорит:

* What went wrong:
Metaspace

Последующие сборки либо тоже выдавали эту ошибку, либо что-то еще более неясное, например:

* What went wrong:
Could not initialize class com.gradle.scan.a.e.c

У этой проблемы нет очевидного решения. Поиск по запросу "gradle metaspace" обнаруживает примечания к выпуску Gradle 5, которые сами по себе обратитесь к нему только здесь:

# 7385 - ограничение метапространства, используемого Gradle

Да и сама проблема не самая полезная.


person AutonomousApps    schedule 04.01.2019    source источник


Ответы (1)


Как мы знаем, Java 8 удалила PermGen и заменила его Метапространство. В Pre-Gradle 5 для Metaspace не было задано максимальное значение, что означало, что он мог расти неограниченно (что он делал бы только при наличии утечки памяти, либо из плагина, либо из самого Gradle). В Gradle 5 теперь по умолчанию установлен максимальный предел 256 МБ. Как только процесс Gradle достигнет этого предела, сборка завершится с ошибкой Metaspace. Этот предел установлен, потому что он рассматривается как «достаточно большой» и разумный, а также с явной идеей более быстрого обнаружения утечек памяти. (Источник: я работаю в Gradle.)

Этот пост дает подсказку, но не дает прямого ответа на вопрос.

Оказывается, увеличить предел метапространства просто. Добавьте это в свой gradle.properties:

org.gradle.jvmargs=-XX:MaxMetaspaceSize=512m

Или какое-то другое значение, которое имеет для вас смысл. 512 просто вдвое больше, чем по умолчанию. Очевидно, это не «решает» проблему, поскольку проблема связана с утечкой памяти. Но это поможет.

person AutonomousApps    schedule 04.01.2019