升级到Gradle 5和Android Plugin 3.3之后,我的构建因“ Metaspace”而失败

时间:2019-01-04 19:46:25

标签: android gradle metaspace

这是在我从4.10.3升级到Gradle 5.0以及从3.2.1升级到3.3.0-rc03的Android Gradle插件时发生的(后者是因为它是正式支持Gradle 5的AGP的第一个版本)。 / p>

在此之后尝试同步项目时,出现错误。该错误仅说明:

* What went wrong:
Metaspace

随后的版本也发出此错误,或者甚至更晦涩,例如:

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

此问题没有明显的解决方案。搜索“渐变元空间”会出现release notes for Gradle 5,它们本身仅在此处引用:

  

#7385-限制Gradle使用的元空间

问题本身并不是最有帮助的。

1 个答案:

答案 0 :(得分:8)

As we know,Java 8删除了PermGen并将其替换为Metaspace。在第5级之前,未为Metaspace设置最大值,这意味着它可以无限制地增长(只有在内存泄漏的情况下(无论是来自插件还是Gradle本身),它才能进行扩展。现在,使用Gradle 5,最大限制为256 MB。一旦Gradle进程达到此限制,构建将失败,并以Metaspace作为错误。设置此限制是因为它既被视为“足够大”又是理智的,并且具有明确的想法来更快地发现内存泄漏。 (来源:我为Gradle工作。)

This post提供了一个线索,但没有直接回答问题。

事实证明,增加元空间限制很简单。将此添加到您的gradle.properties

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

或其他对您有意义的价值。 512只是默认值的两倍。显然,这不能“解决”该问题,因为该问题是某处的内存泄漏。但这会有所帮助。