Was sind die Vorteile von Bytecode gegenüber nativem Code?
Scheint es, wie alles, was Sie tun können, mit der bytecode-Sie können genauso einfach und viel schneller in nativen code. In der Theorie können Sie sogar behalten, Plattform-und Sprachunabhängigkeit durch die Verteilung von Programmen und Bibliotheken in bytecode dann kompilieren zu systemeigenem code bei der installation, eher als JIT.
So im Allgemeinen, wenn Sie möchten ausführen von bytecode statt native?
InformationsquelleAutor der Frage Jay Conrod | 2008-09-07
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hank Shiffman aus SGI gesagt (vor langer Zeit, aber es ist bis true):
Also wenn man bedenkt byte code vs nativen, überlegen Sie, welche Kompromisse Sie machen wollen zwischen Portabilität, Sicherheit, Größe und die Ausführungsgeschwindigkeit. Wenn die Geschwindigkeit ist der einzige Faktor sind, gehen nativen. Wenn alle anderen wichtiger sind, gehen Sie mit bytecode.
Werde ich auch hinzufügen, dass die Aufrechterhaltung einer Reihe von OS und Architektur-gezielte Zusammenstellungen der gleiche code-Basis für jedes release kann sich sehr mühsam. Es ist ein großer Gewinn für die Verwendung der gleichen Java-bytecode auf verschiedenen Plattformen und haben es "einfach funktionieren."
InformationsquelleAutor der Antwort Sean
Die Leistung von nahezu jedem Programm wird sich verbessern, wenn es kompiliert, ausgeführt mit profiling und die Ergebnisse Flossen zurück in die compiler für einen zweiten Durchgang. Die code-Pfade, die tatsächlich verwendet werden aggressiver optimiert, Schleifen ausgerollt, um genau das richtige Maß, und die heiße Anweisung Pfade angeordnet zu maximieren, I$, trifft.
Alle guten Sachen, und doch ist es fast nie getan, weil es ärgerlich ist, zu gehen durch so viele Schritte zum Aufbau einer binären.
Dies ist der Vorteil der Ausführung des bytecode für eine Weile, bevor Sie kompilieren zu systemeigenem code: profiling-Informationen automatisch zur Verfügung. Das Ergebnis nach dem Just-In-Time-Compilierung ist hoch-optimierten nativen code für die spezifischen Daten, die das Programm verarbeitet.
Lage zu laufen, den bytecode ermöglicht auch aggressiver native Optimierung als ein statischer compiler sicher nutzen könnte. Zum Beispiel, wenn eines der Argumente einer Funktion wird angemerkt, immer NULL, alle Behandlung für dieses argument kann einfach weggelassen werden von der native-code. Es wird eine kurze überprüfung der Argumente in den Funktions-Prolog, wenn das argument nicht NULL die VM bricht wieder auf den bytecode und beginnt profiling wieder.
InformationsquelleAutor der Antwort DGentry
Bytecode erzeugt eine zusätzliche Dereferenzierungsebene.
Die Vorteile dieser zusätzliche Dereferenzierungsebene sind:
Einige Nachteile:
InformationsquelleAutor der Antwort Brian R. Bondy
Alle gute Antworten, aber mein hot-button getroffen wurde - performance.
Wenn der code ausgeführt wird, verbringt all seine Zeit aufrufen library/system-Routinen - Datei, Datenbankoperationen, senden die windows-Meldungen, dann spielt es keine Rolle, sehr viel, wenn es JITted, weil die meisten die Uhr Zeit mit warten für die untere-Ebene-Vorgänge abgeschlossen sind.
Jedoch wenn der code enthält Dinge, die normalerweise nennen wir "algorithmen", dass zu schnell und nicht so viel Zeit zum aufrufen von Funktionen, und wenn man die oft genug benutzt werden, um ein performance-problem, dann JIT ist sehr wichtig.
InformationsquelleAutor der Antwort Mike Dunlavey
Ich denke, dass Sie nur Ihre eigene Frage beantwortet: Plattform-Unabhängigkeit. Plattform-unabhängigen bytecode erzeugt und verteilt an seine Ziel-Plattform. Ausgeführt, wenn Sie es schnell in systemeigenen code kompiliert entweder vor der Ausführung beginnt, oder gleichzeitig (Just-In-Time). Die Java JVM und vermutlich die .NET-Laufzeitumgebungen funktionieren auf diesem Prinzip.
InformationsquelleAutor der Antwort Kyle Cronin
Hier: http://slashdot.org/developers/02/01/31/013247.shtml
Gehen sehen, was die Freaks von Slashdot zu sagen haben! Wenig altmodisch, aber sehr gute Kommentare!
InformationsquelleAutor der Antwort Marcio Aguiar
Idealerweise hätte portablen bytecode, kompiliert Gerade rechtzeitig, um nativen code. Ich glaube, der Grund bytecode Interpretern existieren ohne JIT ist vor allem auf die praktische Tatsache, dass native code Kompilierung erhöht die Komplexität einer virtuellen Maschine. Es braucht Zeit, um zu erstellen, zu Debuggen und zu pflegen, dass eine zusätzliche Komponente. Nicht jeder hat die Zeit oder die Ressourcen, um dieses Engagement.
Einem sekundären Faktor ist die Sicherheit. Es ist viel einfacher, um zu überprüfen, ein Dolmetscher wird nicht Abstürzen, als auf Garantie die gleiche für native code.
Dritte ist die Leistung. Es kann oft mehr Zeit zum generieren von Maschinencode als zu interpretieren bytecode für kleine Stücke von code, der nur einmal ausgeführt.
InformationsquelleAutor der Antwort Josh Segall
Portabilität und Plattformunabhängigkeit sind wohl die bemerkenswertesten Vorteile von bytecode über nativen code.
InformationsquelleAutor der Antwort Fiery Phoenix