簡體   English   中英

使用 Gradle 運行單元測試時,最大堆大小在哪里設置?

[英]Where does the maximum heap size get set when running a unit test with Gradle?

我有一個失敗的 OOM 單元測試,想知道為什么我需要手動允許更大的maxHeapSize ,如下所示:

test {
  maxHeapSize = '4G'
}

我假設最大堆沒有上限,並且在 gradle api 來源中找不到任何東西來證明我錯了。 但是,使用--info運行 gradle 清楚地表明:

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 任務的默認最大堆大小可能重復

512m默認設置在DefaultWorkerProcessBuilder中。 512m是一個折衷方案,適用於中小型項目,並且可以同時運行多個工人。 根據提交消息

默認情況下限制工作進程的 memory

到目前為止,我們的編譯、測試等工作人員沒有默認的 memory 設置,這意味着我們將使用 JVM 給出的默認值,在大多數情況下是系統 ZCD69B4957F06CD818D7BF3D61980E2 的 1/4。 當與大量工人一起運行時,這太過分了。 對於中小型項目,將其限制為 256m 應該足夠了。 較大的項目將不得不調整這個值。


除此之外,有沒有辦法允許無限的最大堆,這會是一件完全不合理的事情嗎?

在撰寫本文時,我不知道有任何 JVM 實現允許無限制的 memory,老實說,我不認為這是可取的,因為它會大大降低系統速度。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM