Ich entwickle eine Java 8 SE-Anwendung in Netbeans. Ein neues Feature, das ich kürzlich der App hinzugefügt habe, lief zu langsam (ungefähr eine Minute, bis die Berechnungen gestoppt wurden). Also habe ich den Profiler angezündet, um zu sehen, was der größte Engpass ist. Zu meiner Überraschung wurden die Berechnungen in etwa 7 Sekunden abgeschlossen.Warum läuft meine Java App schneller mit angehängtem Profiler?
Ich konnte es zuerst nicht glauben, aber die Ergebnisse waren korrekt. Ich habe es ein paar Mal versucht, aber die App lief immer 10-mal schneller mit dem Profiler, der daran angeschlossen war. Ich habe auch versucht, die kompilierte .jar-Datei direkt von der Windows-Befehlszeile auszuführen, aber die Berechnungen haben immer wieder etwa eine Minute gedauert.
Wie ist es möglich, dass der angeschlossene Profiler die Leistung so massiv steigert? Was ändert sich an der JVM oder der Anwendung?
BTW, ich benutze native OpenCV in diesen Berechnungen mit bereitgestellten Java-Wrapper, wenn es einen Unterschied macht.
// Bearbeiten - Zusätzliche Informationen: Ich benutze den integrierten Netbeans 8.1 Profiler, der im Grunde genommen VisualVM ist. Wie bei einer Profilierungsmethode habe ich mich entschieden, "Methoden" und deren Ausführungszeiten und Aufrufzahlen zu überwachen. Der Performance-Stoß tritt sowohl bei instrumentierten als auch bei abgetasteten Profilen auf.
Ich denke, Ihre Frage könnte besser von "Warum ist die Profiler Umgebung schneller "zu" warum ist die Nicht-Profiler-Umgebung langsamer ". – brycem
Welchen Profiler benutzen Sie? 'Was ändert sich mit der JVM oder der Anwendung?' Kann nur beantwortet werden, wenn Sie diese Informationen angeben, da es verschiedene Profiling-Techniken (Sampling, Instrumentierung, ...) gibt;) –
@Markus Weninger Ich habe den Beitrag mit einigen Informationen aktualisiert – Leprechaun