8

どちらの場合もSBT0.12.1を使用して、一部のコードを2.9.1から2.10.0に更新しています(同じ結果で2.10.1を試しました)。

sbt clean compileコマンドラインで実行すると、両方とも約250秒後に完了します。

ただし、sbtインタラクティブに実行し、繰り返し入力するcleancompile、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

何が起こっているのかを知るためにデバッグするための最良の方法は何ですか?

4

2 に答える 2

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
于 2013-03-17T00:25:51.300 に答える
0

まず、プロファイラーまたはモニターを接続して、GCで何が起こっているかを確認します。JVisualVMのようなストックツールがどうなっているのかを最初に理解するには、十分なはずです。もちろん、YourKitがあれば、それもうまくいくでしょう。

補遺

やや興味深いが、今ではほとんど無関係であるとして、私は最近、Specs2テストをコンパイルするときにScala 2.9.0-1がひどく遅いことを発見しました(少なくとも不変)。2.9.1に切り替えると、大きな違いが生まれました。以前にユニットテストがなかったプロジェクトにいくつかの単体テストを追加する必要があり、コンパイル時間が苦痛になったときにのみ気づきました。思い切って2.9.1に切り替えたところ、すべてが正常に戻りました。

于 2013-03-14T17:52:35.503 に答える