Scala 2.10编译器在SBT中首次使用后需要长10倍

Mik*_*ike 8 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的堆大小,则在第3次编译时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
Run Code Online (Sandbox Code Playgroud)

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

Mik*_*ike 7

谢谢你的CodeCache链接反义词.我最初解雇它,因为使用它的建议-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
Run Code Online (Sandbox Code Playgroud)