2016-08-02 136 views
3

我使用我特別構建的Scala運行SBT。我構建的Scala編譯器會在運行時做很多事情,並且有很多函數調用,可以遞歸。設置SBT的堆棧大小

所以當我使用我的內置Scala編譯器運行SBT時,堆棧會在很長一段時間後溢出。我嘗試在啓動SBT時設置-J-Xss。但那不行。

我之前遇到過SBT堆大小的問題。許多帖子都說設置-J-Xmx啓動SBT時不會更改JVM堆大小,因爲它被默認的SBT內存選項覆蓋。 How to set heap size for sbt?

現在,我想知道是否可以通過默認SBT選項覆蓋-J-Xss,就像覆蓋-J-Xmx一樣。或者我應該簡單地設置-J-Xss較大?

回答

1

有很多方法可以做到這一點,但這取決於您嘗試實現的目標。如果您希望更大的堆來運行測試,請參閱此處採用的第二種方法。

SBT_OPTS

首先,你可以簡單地設置環境變量SBT_OPTS這SBT將本地查找在加載自身,這應該越過你要指定的任何設置。

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

定製啓動

另一種方式來達到同樣的是基本上創建自定義的SBT啓動腳本。看看示例here

爲了測試

如果要修改測試選項,你需要使用javaOptions in ThisBuild ++= Seq("-Xmx1g", ...)。對於他們甚至可以運行,你總是需要有fork in Test := true,這將創建一個分叉的JVM用於運行測試。沒有這些,指定的選項將不會受到尊重。

+0

謝謝。我發現-J-Xss10000M確實有效。我認爲你上面的方法也可以應用於-Xss選項。 –