Eclipse führt mein Java-Programm sechsmal schneller aus. Kann ich diese Leistung erzielen, ohne es zu verwenden?

8

Ich habe ein Java-Programm geschrieben, das alle sich wiederholenden Permutationen basierend auf den Zeichen und der angegebenen Länge generiert.

Wenn ich meinen Code in Eclipse ausführe, wird in nur 15 Sekunden eine Datei mit 1.000.000 Permutationen generiert. Wenn ich das Programm jedoch in der Eingabeaufforderung mit "Java-Permutation" auf demselben Computer ausführe, dauert es 1 Minute 35 Sekunden, um dieselben 1M-Permutationen zu generieren.

Warum ist das? Und gibt es überhaupt eine Möglichkeit, diese Art von Leistung ohne Eclipse zu erzielen?

Bearbeiten: Java VisualVM-Ergebnisse hinzugefügt

www.craftboom.co.uk/jvm.png - Die CPU-Auslastung ist höher, wenn Eclipse ausgeführt wird. Sowohl die CPU- als auch die Speichernutzung scheinen in der Shell o_O gelegentlich auf 0 zu sinken

EDIT2: Es stellt sich heraus, dass das Drucken auf dem Bildschirm problematisch ist. Ich habe es in meinem ursprünglichen Beitrag nicht erwähnt, aber das Programm druckt jede Permutation auf der Konsole aus. Kommentierte dies aus und speicherte es stattdessen in einer Datei. Jetzt läuft es in Shell und Eclipse gleich schnell. :-)

Vielen Dank an alle für die Antworten.

Lambert
quelle
3
Sollte Eclipse nicht langsamer sein?
Dynamisch
1
Können Sie uns zeigen, wie Sie das Programm außerhalb von Eclipse starten?
Winston Ewert
1
Ich starte es einfach mit einer .bat-Datei @echo aus Java-Permutationen
Lambert
2
Stellen Sie sicher, dass beide Starts dieselbe Laufzeitumgebung verwenden. Finden Sie heraus, welche Eclipse verwendet, und geben Sie sie beim Start der Befehlszeile als -vm-Parameter an. Die Laufzeitumgebung, die Eclipse beim Starten verwendet, ist unter "Ausführen-> Ausführen von Konfigurationen ..." konfiguriert. Wählen Sie die von Ihnen verwendete aus (wahrscheinlich unter "Java-Anwendungen" und schauen Sie auf der Registerkarte "JRE" nach.
Ozan
5
Bezogen auf stackoverflow.com/questions/7206123/… ?
Patrick Hughes

Antworten:

9

Längere Laufzeiten weisen auf ein Speicherproblem hin. Entweder Sie wechseln auf die Festplatte oder Sie haben viel mehr Speicherbereinigungen als in Eclipse (weil Sie einen kleineren Heap haben).

Führen Sie es mit einem Profiler aus und sehen Sie, wo die Zeit verbracht wird. Für Java beginnen Sie mit jvisualvm im JDK.


quelle
Ich habe jvisualvm ausgeführt, was gezeigt hat, dass das Programm weder in der Shell noch in der Eclipse mehr als 20 MB der Heapsize verwendet.
Lambert
Meine Ergebnisse wurden hier hinzugefügt : craftboom.co.uk/jvm.png Es scheint, dass die CPU-Auslastung bei der Ausführung in Eclipse höher ist. Sowohl die CPU- als auch die Speichernutzung scheinen gelegentlich in der Shell o_O
Lambert
Es stellte sich heraus, dass ich jede Permutation auf die Konsole gedruckt habe. Das Problem wurde behoben. Vielen Dank für Ihre Antwort
Lambert
Das Problem war also die Langsamkeit Ihrer Konsole. Ignorieren Sie die Konsolenausgabe beim Timing immer.
7

Überprüfen Sie die Einstellungen in eclipse.ini in Ihrer Installation (es enthält JVM-Einstellungen). Es ist möglich, dass sie die JVM so konfigurieren, dass sie effizienter genutzt wird als Sie, wenn Sie das Programm ausführen.

http://wiki.eclipse.org/Eclipse.ini

http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html

jmq
quelle
Vielen Dank für die Antwort. Ich habe jedoch versucht, mein Programm mit denselben Argumenten für Eclipse zu starten. Immer noch das gleiche Ergebnis: /
Lambert