【问题标题】:Android Gradle: What is javaMaxHeapSize "4g"?Android Gradle:什么是 javaMaxHeapSize “4g”?
【发布时间】:2016-02-18 10:31:08
【问题描述】:

在一个android项目中,build.gradle文件,我已经通过了这一行

dexOptions{
    javaMaxHeapSize "4g"
}

我想知道这个 javaMaxHeapSize 的确切用途以及 4g 是什么意思。我还能给出哪些其他价值?

【问题讨论】:

  • '将这个数字设置得很高有什么缺点吗?'是一个我没有看到解决的问题。我最近将我的游戏应用从 4g 更改为 8g,以确保我的游戏应用不会有明显的不良影响。

标签: android gradle dex


【解决方案1】:

正如answer above 中提到的,它只是为 dex 操作指定 Java 虚拟机 (JVM) 的最大内存分配池的一个选项。同样,为 java 提供 -xmx 参数。由于它的源代码来自here,所以它的 setter 看起来像:

if (theJavaMaxHeapSize.matches("\\d+[kKmMgGtT]?")) {
    javaMaxHeapSize = theJavaMaxHeapSize
} else {
    throw new IllegalArgumentException(
            "Invalid max heap size DexOption. See `man java` for valid -Xmx arguments.")
}

因此,您可以看到,接受的值应该匹配\d+[kKmMgGtT]? 模式,因此不匹配,它甚至引用man java 来了解如何设置-xmx。你可以阅读the man page here。它说,这个标志:

指定内存分配池的最大大小(以字节为单位)。此值必须是大于 2MB 的 1024 的倍数。附加字母 k 或 K 表示千字节,或附加字母 m 或 M 表示兆字节。默认值是在运行时根据系统配置选择的。

在您的示例中,4g 为 4 GB,这是 dex 操作的最大堆大小。

【讨论】:

    【解决方案2】:

    这是增加 dex 操作堆大小的未记录选项:https://groups.google.com/d/msg/adt-dev/P_TLBTyFWVY/4TPJ2YY6khUJ

    【讨论】:

      【解决方案3】:

      它是 gradle 在创建构建(apk 文件)时可以使用的最大 RAM。这可以根据项目结构和大小进行更改,允许至少“4g” Ram 总是安全的,但是有时我们也需要提高它,就像我们想使用 minifyEnabled true 或 shrinkResources true 用于发布构建的 gradle 标志

      【讨论】:

        【解决方案4】:
        dexOptions{
            javaMaxHeapSize "4g"
        }
        

        build.gradle 中写入此内容后,转到gradle.properties 并启用此行:

        org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
        

        【讨论】:

        • Xmx 至少应设置为 javaMaxHeapSize。在您的示例中,它是大小的一半。
        • @OldSchool4664 他是对的。应该大于 4096m。
        猜你喜欢
        • 2014-07-12
        • 1970-01-01
        • 2017-09-24
        • 2018-12-25
        • 1970-01-01
        • 2018-04-09
        • 1970-01-01
        • 2014-08-05
        相关资源
        最近更新 更多