Der Scala 2.10 Compiler dauert 10x länger nach dem ersten Mal in SBT

8

Ich aktualisiere einen Code von 2.9.1 auf 2.10.0 (und ich habe 2.10.1 mit den gleichen Ergebnissen versucht), in beiden Fällen SBT 0.12.1.

Wenn ich sbt clean compile in der Befehlszeile ausführen, werden beide nach etwa 250 Sekunden abgeschlossen.

Wenn ich sbt jedoch interaktiv benutze und wiederholt clean und dann compile eintrage, werden meine 2.9-Kompilierungen schneller, aber meine 2.10-Kompilierungen werden 10x langsamer .

Wenn ich eine Heap-Größe von 768m nutze, läuft 2.10 beim dritten Kompilieren der Speicher aus. Mit einer Heap-Größe von 4g kann es jedes Mal kompiliert werden, aber nach der ersten Iteration immer 10x langsamer.

%Vor%

Was ist der beste Weg für mich zu debuggen, um herauszufinden, was vor sich geht?

    
Mike 14.03.2013, 17:19
quelle

2 Antworten

7

Vielen Dank für die CodeCache-Verknüpfung . Ich habe es zunächst abgelehnt, da die vorgeschlagene -XX:+UseCodeCacheFlushing -Option keine Verbesserungen brachte, aber ich habe gerade versucht, -XX:ReservedCodeCacheSize=2g zu benutzen, und das hat das Problem gelöst.

Weiß jemand, warum -XX:+UseCodeCacheFlushing nicht hilft, oder einige empfohlene Werte für alle Code-Cache-Java-Optionen?

Zum Spaß, hier sind meine resultierenden Kompilierzeiten mit -XX:+HeapDumpOnOutOfMemoryError -server -XX:ReservedCodeCacheSize=2g -Xmx4g -Xss4M -XX:MaxPermSize=512M -XX:+DoEscapeAnalysis -XX:+UseCompressedOops -XX:+CMSClassUnloadingEnabled -XX:+UseCodeCacheFlushing

%Vor%     
Mike 17.03.2013, 00:25
quelle
0

Sie können zunächst einen Profiler oder Monitor anschließen, um zu sehen, was mit GC passiert. Um eine erste Vorstellung davon zu bekommen, was los ist, sollte ein Stock Tool wie JVisualVM ausreichen. Natürlich, wenn Sie YourKit haben, würde das auch gut funktionieren.

Addendum

Als leicht interessant, aber jetzt weitgehend irrelevant beiseite, habe ich kürzlich entdeckt, dass Scala 2.9.0-1 erschreckend langsam war, wenn sie Specs2-Tests kompilierte (zumindest unveränderlich). Die Umstellung auf 2.9.1 hat einen großen Unterschied gemacht. Ich habe es nur bemerkt, als ich einige Komponententests zu einem Projekt hinzufügen musste, das vorher keine hatte, und die Kompilierungszeiten wurden qualvoll. Nach einer Ahnung wechselte ich zu 2.9.1 und alles lief wieder normal.

    
Randall Schulz 14.03.2013 17:52
quelle

Tags und Links