升级到 Gradle 5 和 Android 插件 3.3 后,我的构建失败并出现"Metaspace"



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

在此之后尝试同步我的项目时,出现错误。错误只说:

* What went wrong:
Metaspace

后续构建要么也发出此错误,要么发出更晦涩的内容,例如:

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

这个问题没有明显的解决方案。搜索"gradle metaspace"会找到 Gradle 5 的发行说明,这些发行说明本身仅在此处引用:

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

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

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

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

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

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

或者其他一些对你有意义的值。 512 只是默认值的两倍。显然,这并不能"解决"问题,因为问题是某处的内存泄漏。但它会有所帮助。

最新更新