设置SBT的堆栈大小

问题描述 投票:0回答:2

我正在使用我专门构建的 Scala 运行 SBT。我构建的Scala编译器会在运行时做很多事情,有很多函数调用,这些可以是递归的。

所以当我使用我构建的 Scala 编译器运行 SBT 时,很长一段时间后堆栈溢出。我尝试在启动 SBT 时设置 -J-Xss 。但这是行不通的。

我之前遇到过SBT堆大小的问题。许多帖子表示,启动 SBT 时设置 -J-Xmx 不会更改 JVM 堆大小,因为它会被默认的 SBT 内存选项覆盖。 如何设置sbt的堆大小?

现在,我想知道 -J-Xss 是否可以被默认的 SBT 选项覆盖,就像 -J-Xmx 被覆盖一样。或者我应该尝试将 -J-Xss 设置得更大?

scala sbt
2个回答
1
投票

有很多方法可以做到这一点,但这取决于您想要实现的目标。例如,如果您想要更大的堆来运行测试,请查看此处采用的第二种方法。

SBT_OPTS

首先,您可以简单地设置环境变量

SBT_OPTS
,SBT 在加载自身时会本机查找该变量,这应该会覆盖您想要指定的任何设置。

export SBT_OPTS = "-Xmx1G;-Xms256m;...";

自定义启动器

实现相同目的的另一种方法是创建自定义 SBT 启动脚本。看一下示例这里

用于测试

如果要修改测试选项,则需要使用

javaOptions in ThisBuild ++= Seq("-Xmx1g", ...)
。为了让它们运行,你总是需要
fork in Test := true
,这将创建一个分叉的 JVM 来运行测试。否则,指定的选项将不会得到尊重。


0
投票

您可以尝试使用 .jvmopts 文件,例如

-Dfile.encoding=UTF8
-Xss6M
-XX:ReservedCodeCacheSize=512m
-XX:+UseG1GC

.sbtopts 在 Windows 上可能会被忽略 https://github.com/sbt/sbt/issues/4919#issuecomment-544049693

© www.soinside.com 2019 - 2024. All rights reserved.