使用 Gradle 运行单元测试时,最大堆大小在哪里设置?

2024-05-11

我有一个失败的 OOM 单元测试,并想知道为什么我需要手动允许更大的maxHeapSize像这样:

test {
  maxHeapSize = '4G'
}

我认为最大堆没有上限,并且在 gradle api 源中找不到任何东西来证明我错了。但是,运行 gradle--info清楚地揭示了其他情况:

Starting process 'Gradle Test Executor 427'. Working directory: [project-dir] Command: /Library/Java/JavaVirtualMachines/jdk1.8.0_91.jdk/Contents/Home/bin/java -Djava.security.manager=worker.org.gradle.process.internal.worker.child.BootstrapSecurityManager -Dorg.gradle.native=false -javaagent:build/tmp/expandedArchives/org.jacoco.agent-0.8.6.jar_a26f6511a7813217be4cd6439d66563b/jacocoagent.jar=destfile=build/jacoco/test.exec,append=true,inclnolocationclasses=false,dumponexit=true,output=file,jmx=false -Xmx512m -Dfile.encoding=UTF-8 -Duser.country=US -Duser.language=en -Duser.variant -ea -cp /Users/[user]/.gradle/caches/6.4/workerMain/gradle-worker.jar worker.org.gradle.process.internal.worker.GradleWorkerMain 'Gradle Test Executor 427'

我的问题是哪里-Xmx512m以上从何而来?

除此之外,有没有办法允许无限的最大堆,这会是一件完全不合理的事情吗?

可能重复的JavaExec Gradle 任务的默认最大堆大小 https://stackoverflow.com/questions/45737680/default-maximum-heap-size-for-javaexec-gradle-task


The 512m默认设置为DefaultWorkerProcessBuilder https://github.com/gradle/gradle/blob/124712713a77a6813e112ae1b68f248deca6a816/subprojects/core/src/main/java/org/gradle/process/internal/worker/DefaultWorkerProcessBuilder.java#L230. 512m是一种权衡,适用于中小型项目,并且考虑到多个工作人员可以同时运行。根据提交消息 https://github.com/gradle/gradle/commit/9a92c84e58af24f4ce8300cc875597aadb4f41f1:

默认限制工作进程的内存

我们的编译、测试等工作没有默认 到目前为止的内存设置,这意味着我们将使用 JVM 给出的默认值,即系统内存的 1/4 在多数情况下。当以高速度运行时,这太多了 工人数量。将其限制为 256m 应该足够了 中小型项目。较大的项目必须 调整这个值。


除此之外,有没有办法允许无限的最大堆,这会是一件完全不合理的事情吗?

在撰写本文时,我不知道有任何 JVM 实现允许无限内存,并且老实说我认为这是不可取的,因为它会显着降低系统速度。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Gradle 运行单元测试时,最大堆大小在哪里设置? 的相关文章

随机推荐