[英]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
來自哪里?
除此之外,有沒有辦法允許無限的最大堆,這會是一件完全不合理的事情嗎?
512m
默認設置在DefaultWorkerProcessBuilder
中。 512m
是一個折衷方案,適用於中小型項目,並且可以同時運行多個工人。 根據提交消息:
默認情況下限制工作進程的 memory
到目前為止,我們的編譯、測試等工作人員沒有默認的 memory 設置,這意味着我們將使用 JVM 給出的默認值,在大多數情況下是系統 ZCD69B4957F06CD818D7BF3D61980E2 的 1/4。 當與大量工人一起運行時,這太過分了。 對於中小型項目,將其限制為 256m 應該足夠了。 較大的項目將不得不調整這個值。
除此之外,有沒有辦法允許無限的最大堆,這會是一件完全不合理的事情嗎?
在撰寫本文時,我不知道有任何 JVM 實現允許無限制的 memory,老實說,我不認為這是可取的,因為它會大大降低系統速度。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.