Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Scala 2.10 compiler takes 10x longer after first time in SBT

I'm updating some code from 2.9.1 to 2.10.0 (and I tried 2.10.1 with the same results), using SBT 0.12.1 in both cases.

When I run sbt clean compile on the command line, they both complete after about 250 seconds.

However, when I run sbt interactively, and repeatedly enter clean then compile, my 2.9 compiles get faster, but my 2.10 compiles get 10x slower.

If I use a heap size of 768m, 2.10 runs out of memory on the 3rd compile. With a heap size of 4g, it's able to compile each time, but always 10x slower after the first iteration.

[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

What is the best way for me to debug to find out what's going on?

like image 870
Mike Avatar asked Mar 14 '13 17:03

Mike


1 Answers

Thank you retronym for the CodeCache link. I initially dismissed it, since using its suggested -XX:+UseCodeCacheFlushing option made no improvements, but I just tried using -XX:ReservedCodeCacheSize=2g and that solved the problem.

Does anyone know why -XX:+UseCodeCacheFlushing doesn't help, or some recommended values for all of the code cache java options?

For fun, here are my resulting compile times using -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
like image 94
Mike Avatar answered Sep 19 '22 11:09

Mike