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

Aut*_*pps 4 android gradle metaspace

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

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

* What went wrong:
Metaspace
Run Code Online (Sandbox Code Playgroud)

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

* What went wrong:
Could not initialize class com.gradle.scan.a.e.c
Run Code Online (Sandbox Code Playgroud)

这个问题没有明显的解决方案。搜索“ gradle metaspace”会显示Gradle 5的发行说明,它们本身仅在此处引用:

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

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

Aut*_*pps 14

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

这篇文章提供了一个线索,但没有直接回答问题。

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

org.gradle.jvmargs=-XX:MaxMetaspaceSize=512m
Run Code Online (Sandbox Code Playgroud)

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