android - 升级到 Gradle 5 和 Android Plugin 3.3 后,我的构建失败并显示 "Metaspace"

标签 android gradle metaspace

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

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

* What went wrong:
Metaspace

随后的构建要么也发出了这个错误,要么发出了一些更模糊的错误,比如:

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

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

#7385 - Limit Metaspace used by Gradle

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

最佳答案

As we know , Java 8 移除了 PermGen 并用 Metaspace 取而代之。在 Gradle 5 之前,没有为 Metaspace 设置最大值,这意味着它可以无限制地增长(只有在存在内存泄漏时才会这样做,无论是来自插件还是 Gradle 本身)。对于 Gradle 5,现在默认设置的最大限制为 256 MB。一旦 Gradle 进程达到此限制,构建将失败并显示 Metaspace 作为错误。设置此限制是因为它被视为既“足够大”又理智,并且还具有更快发现内存泄漏的明确想法。 (来源:我为 Gradle 工作。)

This post给出了线索​​,但没有直接回答问题。

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

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

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

关于android - 升级到 Gradle 5 和 Android Plugin 3.3 后,我的构建失败并显示 "Metaspace",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54045132/

相关文章:

java - Tomcat 8 元空间内存不足问题

Android 等效于 C# 的 Application.DoEvents();

android - 在 Canvas 上绘图并保存图像

android - 如何在不重复布局和业务逻辑的情况下创建一个可以跨多个 Activity 使用的 UI?

android-studio - 运行任务 :api:endpointsDiscoveryDocs on gradle results in java. lang.ClassNotFoundException: -h

java - 更正用于类卸载(元空间清理)/cxf 问题的 Java 8 设置

hibernate - 为什么类元空间在 Java 8 中会随着时间的推移而增加?

android - 如何从使用 getIntent() 接收数据的 Activity 发送数据?

gradle - 将变量从Groovy类传递回Gradle任务

gradle - 无法导入新的 Gradle 项目 : Could not install Gradle distribution from 'http://services.gradle.org/distributions/gradle-1.6-bin.zip'