为SBT设置堆栈大小

4

我正在使用我专门构建的Scala运行SBT。我的编译器会在运行时完成许多操作,并调用许多函数,这些函数可以是递归的。

因此,当我使用我的编译器运行SBT时,经过一段时间后会发生堆栈溢出。我尝试在启动SBT时设置-J-Xss,但没有起作用。

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

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

1个回答

1

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

SBT_OPTS

首先,您可以简单地设置环境变量SBT_OPTS,而SBT将在加载自身时本地查找它,并且这应该会覆盖您想要指定的任何设置。

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

自定义启动器

另一种实现相同效果的方法是创建一个自定义 SBT 启动脚本。请参考此处的示例。

测试

如果您想修改测试选项,您需要使用javaOptions in ThisBuild ++= Seq("-Xmx1g", ...)。为了使它们得到运行,您总是需要设置fork in Test := true,这将创建一个分离的 JVM 用于运行测试。如果没有这个设置,指定的选项将不会被遵守。


谢谢。我发现-J-Xss10000M确实有效。我认为你上面的方法也可以应用于-Xss选项。 - Yu Shi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接