Frage

Ich interessiere mich für die Optimierung zur Laufzeit durch eine VM und zur Compile-Zeit. Ich habe die Idee hatte, die Optimierungen sind am effizientesten und am einfachsten zu Kompilierung-Zeit.

Aber meine Gedanken scheinen unter bestimmten Umständen falsch. Dies zeigt sich in Steve Yeggie Aussage zitiert von Daniel

  

[O] ptimization ist oft einfacher, wenn zur Laufzeit durch eine geschickte ausgeführt   virtuelle Maschine - -.

Warum ist die Optimierung einfacher, wenn zur Laufzeit von einem VM ausgeführt als bei der Kompilierung-Zeit?

War es hilfreich?

Lösung

Kurze Antwort:. Weil es einfacher ist, zu identifizieren und zur Laufzeit der Hotspots zu analysieren - die Teile des Programms, die die meiste Zeit mit

Lange Antwort:

Wenn Sie den Code im interpretierten Modus kann eine virtuelle Maschine laufen beginnen zählen, wie oft und wie lange verschiedene Teile des Codes verwendet werden. Diese Teile besser optimiert werden können.

Nehmen Sie if-then-else-Klauseln verschachtelt. Weniger boolean Kontrollen benötigen weniger Laufzeit. Wenn Sie den Pfad für den Teil zu optimieren, die öfter ausgeführt wird, können Sie eine bessere Gesamtlaufzeit bekommen.

Ein weiterer Punkt ist, dass Sie zur Laufzeit Annahmen getroffen werden können, die zum Zeitpunkt der Kompilierung nicht möglich sind. Der Java-VM zum Beispiel inlines in Server-Modus virtuelle Methoden - so lange nur eine Klasse geladen wird, implementiert, dass diese Methode. Das wäre gefährlich, wenn zum Zeitpunkt der Kompilierung durchgeführt. Die JVM deoptimizes den Code wieder, wenn eine andere Klasse geladen wird, aber oft dies geschieht nie.

Auch zur Laufzeit ist mehr bekannt über die Maschine das Programm läuft. Wenn Sie eine Maschine mit mehreren Registern haben könnten Sie sie verwenden. Auch hier, dass nicht sicher ist, zur Compile-Zeit getan, wenn.

Eine Sache, zu sagen: zur Laufzeit zu optimieren auch Nachteile hat. Am wichtigsten: die Zeit für die Optimierungen an die Laufzeit des Programms hinzugefügt. Auch ist es komplizierter, weil Sie müssen Teile des Programms kompilieren und führt sie aus. Bugs in der virtuellen Maschine ist kritisch. Denken Sie an einen Compiler, dass manchmal Absturz - Sie wieder kompilieren und alles ist in Ordnung. Wenn eine VM stürzt manchmal ab, das bedeutet, dass das Programm manchmal abstürzt. Nicht gut.

Als Fazit: Sie können jede Optimierung zur Laufzeit tun, das ist möglich bei der Kompilierung-Zeit ... und einige mehr. Sie haben mehr Informationen über das Programm, es ist execution-Pfade und die Maschine das Programm läuft. Aber Sie haben in der Zeit für den Betrieb der Optimierungen erforderlich Faktor. Auch ist es komplizierter, zur Laufzeit zu tun, und Fehler sind relevanter als bei der Kompilierung-Zeit.

Andere Tipps

Da gibt es weitere Informationen ist zur Laufzeit zur Verfügung. Zum Beispiel genauen CPU, Betriebssystem und anderen Umwelt-Details bekannt sind. Diese Information hat Auswirkungen darauf, wie sollte die Optimierung durchgeführt werden.

Der VM hat vollständigen Code des Programms und die Compiler oft nur Teilcode wegen separater Übersetzung von verschiedenen Übersetzungseinheiten. Die VM daher mehr Daten für die Analyse hat.

Da zur Laufzeit Sie zusätzliche Informationen haben. Wie die Maschine ausführt, den Speicher des Prozessgrenzen und wahrscheinlich am wichtigsten ist, was Code ausgeführt wird und wie oft

Diese Dinge können Sie Laufzeitoptimierungen machen, die man einfach nicht bei der Kompilierung machen.

VM-Statistiken sammeln kann zu optimieren, ebenfalls eine Datenbank funktioniert über Ihre Benutzung.

Kontinuierlich Statistiken zu halten und die Überprüfung Invarianten sind auch Overhead zu Ausführungszeit kompiliert oder interpretiert Fragmente. Wenn Sie nicht schnell optimieren und gut genug, nicht die Mühe. Ich glaube nicht, es einfacher ist, keine besseren Ergebnisse zu erzielen ist es Zeit statt der Kompilierung laufen zu tun. Ich denke, es ist noch schwieriger, die Komplexität einer guten Umsetzung berücksichtigen.

ähnlich wie das weit verbreitete Missverständnis über eine ausreichend guten optimierende Compiler bessere Montag als Menschen zu erzeugen, ausreichend klug VM kann verdammt zu klug sein müssen schneller auszuführen.

Etwas zu erkennen ist, dass es nicht das Konzept einer VM ist, die Laufzeit Optimierungen ermöglicht, es ist die Tatsache, dass viele VMs wegzuwerfen nicht die ursprüngliche Programm Meta-Daten und haben in der Funktionalität für die Reflexion gebaut. Ein treffendere Begriff zu verwenden, wäre eine „Runtime-Bibliothek“ sein kann alleine besser Optimierungen als statische Optimierungen tun; dies gilt auch für Nicht-VM-Sprachen wie C.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top