Scala 2.10 编译器在第一次使用 SBT 后需要 10 倍的时间

标签 scala scala-2.10

我正在将一些代码从 2.9.1 更新到 2.10.0(我尝试了 2.10.1,结果相同),在这两种情况下都使用 SBT 0.12.1。

当我跑 sbt clean compile在命令行上,它们都在大约 250 秒后完成。

但是,当我运行 sbt 时交互,重复输入 clean然后 compile ,我的 2.9 编译变得更快,但我的 2.10 编译得到 慢 10 倍 .

如果我使用 768m 的堆大小,2.10 在第三次编译时内存不足。堆大小为 4g,每次都可以编译,但在第一次迭代后总是慢 10 倍。

[success] Total time: 258 s, completed Mar 14, 2013 10:44:34 AM
[success] Total time: 2048 s, completed Mar 14, 2013 11:23:03 AM
[success] Total time: 2049 s, completed Mar 14, 2013 11:58:42 AM
[success] Total time: 2047 s, completed Mar 14, 2013 12:43:19 PM

我调试以找出发生了什么的最佳方法是什么?

最佳答案

感谢您对 CodeCache link 的改名.我最初驳回了它,因为使用它建议的 -XX:+UseCodeCacheFlushing选项没有改进,但我只是尝试使用 -XX:ReservedCodeCacheSize=2g这解决了问题。

有谁知道为什么-XX:+UseCodeCacheFlushing没有帮助,或者所有代码缓存 java 选项的一些推荐值?

为了好玩,这是我使用 -XX:+HeapDumpOnOutOfMemoryError -server -XX:ReservedCodeCacheSize=2g -Xmx4g -Xss4M -XX:MaxPermSize=512M -XX:+DoEscapeAnalysis -XX:+UseCompressedOops -XX:+CMSClassUnloadingEnabled -XX:+UseCodeCacheFlushing 得到的编译时间

2.10.1 (interactive, repeating clean/compile)
    194 s
    149 s
    95 s
    87 s
    84 s
2.9.1 (interactive, repeating clean/compile)
    187 s
    129 s
    83 s
    77 s
    74 s
2.10.1 (batch sbt clean compile)
    195 s
2.9.1 (batch sbt clean compile)
    177 s

关于Scala 2.10 编译器在第一次使用 SBT 后需要 10 倍的时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15415974/

相关文章:

java.lang.NoClassDefFoundError : scala/StringContext

scala - 如何在不使用switch语句的情况下基于两个对象的类型在Scala/Java中调用正确的方法?

scala - 从字符串生成一个类并在 Scala 2.10 中实例化它

scala - 在运行时传递类型信息

scala - 列表中的前 n 个项目(包括重复项)

sbt - specs2-embedmongo 与 Scala 2.10.1 和 Play 2.1.1 的未解决依赖关系

scala - 向编译器请求有关@inline 的更多信息?

class - 为什么在混合特征时会创建一个匿名类?

json - 哪个 JSON 序列化库适合以下情况?

scala - 为什么Scala中的Final变量可以更改值