Gibt es einen Leistungsunterschied zwischen Javac-Debug ein- und ausgeschaltet?

Lesezeit: 2 Minuten

Benutzer-Avatar
Horkrux7

Wenn ich das Generieren von Debug-Infos mit Javac einschalte, werden die Klassendateien 20-25% größer. Hat dies Auswirkungen auf die Leistung beim Ausführen des Java-Programms? Wenn ja, zu welchen Konditionen und wie viele. Ich erwarte einen kleinen Einfluss auf das Laden der Klassen, da die Dateien größer sind, aber das sollte minimal sein.

In jeder Sprache sind Debugging-Informationen Metainformationen. Es erhöht naturgemäß die Größe der Objektdateien und damit die Ladezeit. Bei der Ausführung außerhalb eines Debuggers werden diese Informationen eigentlich komplett ignoriert. Wie skizziert (wenn auch nicht klar) in der JVM-Spezifikation die Debug-Informationen werden außerhalb des Bytecode-Streams gespeichert. Das bedeutet, dass es zur Ausführungszeit keinen Unterschied in der Klassendatei gibt. Wer sicher gehen will, probiert es aus :-).

PS. Für das Debugging ist es oft sinnvoll, die Optimierung zu deaktivieren. Dass tut einen Einfluss auf die Leistung haben.

  • Hat Javac immer noch -O? Zuletzt erinnere ich mich, dass es das Äquivalent von -g:none war.

    – Tom Hawtin – Angelleine

    20. Oktober 2008 um 12:33 Uhr

  • Richtig. Die Ladezeit wird beeinflusst, die Ausführungszeit jedoch nicht.

    – Köhlerm

    20. Oktober 2008 um 13:16 Uhr

  • Tatsächlich hat der Sun-Java-Compiler kein Optimierungs-Flag. Die Optimierung findet hauptsächlich in der Hotspot-Laufzeit statt. Die Optimierung zur Kompilierungszeit kann die Optimierungsfähigkeit von Hotspots beeinträchtigen (unter Verwendung vollständiger Informationen, die nur zur Kompilierungszeit verfügbar sind).

    – Paul de Vrieze

    2. Januar 2010 um 20:05 Uhr

  • Wie viel Beeinflusst es Größe und Ladezeit? Gibt es bereits durchgeführte Benchmarks, die wir uns ansehen können?

    – Martin

    29. Dezember 2014 um 18:35 Uhr

Alleine das Debuggen zu deaktivieren sollte überhaupt keinen Unterschied machen. Aber sobald Sie das Debuggen deaktivieren und die Optimierung aktivieren, sollten Sie einen Unterschied sehen, da dies einige statische Optimierungen zur Kompilierzeit vornimmt. So wird auch Ihr Hotspot-optimierter Code zur Laufzeit schneller.

Aber bisher habe ich beim Kompromiss zwischen sinnvollen vollständigen Stack-Traces oder etwas mehr Benutzerleistung immer für die Stack-Traces gestimmt. Schließlich sind die Benutzer bereit, jedes Jahr 1000 $ auszugeben, um eine schnellere Maschine zu bekommen, aber sie sind nicht bereit, 15 Minuten damit zu verbringen, Ihnen aussagekräftige Fehlermeldungen zur Lösung ihrer Probleme zu geben.

Nach den Jahren bin ich eher bereit, meine 15 Minuten höher zu bewerten als die 1000 $ des Benutzers. 🙂

Bitte beachten Sie, dass, da JDK1.3 Javac alle Optimierungs-Flags ignoriert, “Kompilierungszeit-Optimierung unnötig ist”.

1073540cookie-checkGibt es einen Leistungsunterschied zwischen Javac-Debug ein- und ausgeschaltet?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy