Was ist der Unterschied zwischen Java Virtual Machine und Dalvik Virtual Machine?
Antworten
Zu viele Anzeigen?DVM basiert auf Registern, die mit wenig Speicher auskommen, verwendet seinen eigenen Bytecode und führt .Dex-Dateien aus.
JVM basiert auf einem Stack, der Java-Bytecode verwendet und eine .class-Datei mit JIT ausführt.
Der Java-Quellcode wird vom Java-Compiler in .class-Dateien kompiliert. Anschließend verarbeitet das Tool dx (dexer), das Teil des Android-SDK ist, die .class-Dateien in ein Dateiformat namens DEX, das Dalvik-Bytecode enthält. Das dx-Tool entfernt alle überflüssigen Informationen, die in den Klassen enthalten sind. In DEX werden alle Klassen der Anwendung in eine Datei gepackt. DVM wurde so konzipiert, dass ein Gerät mehrere Instanzen der VM effizient ausführen kann.
Stack-basierte Maschinen müssen Befehle verwenden, um Daten auf den Stack zu laden und diese Daten zu manipulieren, und benötigen daher mehr Befehle als Registermaschinen, um denselben High-Level-Code zu implementieren, aber die Befehle in einer Registermaschine müssen die Quell- und Zielregister kodieren und sind daher tendenziell größer.
Konzeptionell gibt es wenig Unterschied auf der Anwendungsebene zwischen einer DVM und einer JVM. Architektonisch gibt es einen großen Unterschied zwischen der registerbasierten DVM und der stapelbasierten JVM.
Beide verwenden ein VM-Code-Modell. Allerdings verwendet die DVM verwendet jedoch registergestützte Opcodes, die vergleichbar sind mit dem registerbasierten Bytecode-Anweisungen vergleichbar sind, die von den meisten Zielplattformen bereits ausführen. Diese schließt Architekturen wie die von von ARM und MIPS sowie die x86-kompatiblen Architekturen von Intel, AMD und VIA Technologies.
Google entwickelte Android und wählte DVM aus mehreren Gründen. Erstens gab es Lizenzierungsprobleme mit den meisten JVMs. Zweitens, sollte die DVM effizienter sein in Bezug auf in Bezug auf Speicherverbrauch und Leistung auf einer registerbasierten Maschine. DVM ist soll auch effizienter sein bei der Ausführung mehrerer Instanzen des DVM. Die Anwendungen erhalten ihre eigene Instanz. Folglich erfordern mehrere aktive Anwendungen erfordern daher mehrere DVM Instanzen. Wie die meisten Java Implementierungen hat der DVM ein automatischen Garbage Collector.
Die jvm-Architektur ist stackbasiert, während die dvm-Architektur registerbasiert ist. Stapelbasierte Maschinen benötigen für die gleiche Aufgabe mehr Anweisungen (d.h. einen größeren Befehlssatz) als registerbasierte Maschinen. Auf der anderen Seite sind die einzelnen Befehle in den registerbasierten Maschinen größer.
Wenn eine virtuelle Java-Maschine ein Programm ausführt, benötigt sie Speicher für viele Dinge zu speichern, einschließlich Bytecodes und anderer Informationen, die sie aus geladenen Klassendateien, vom Programm instanziierte Objekte, Parameter für Methoden, Rückgabewerte, lokale Variablen und Zwischenergebnisse von Berechnungen.
Die virtuelle Java-Maschine organisiert den Speicher, der für die Ausführung eines Programms benötigt wird in mehrere Laufzeitdatenbereiche.
Im Allgemeinen müssen stapelbasierte Maschinen Anweisungen verwenden, um Daten auf den Stapel zu laden und diese Daten zu manipulieren, und benötigen daher mehr Anweisungen als Registermaschinen, um denselben High-Level-Code zu implementieren, aber die Anweisungen in einer Registermaschine müssen die Quell- und Zielregister kodieren und sind daher tendenziell größer.
Dieser Unterschied ist vor allem für VM-Interpreter von Bedeutung, für die Opcode Dispatch tendenziell teuer ist und andere Faktoren für die JIT-Kompilierung relevant sind.
Da Dalvik für geringen Speicherbedarf optimiert ist, hat es einige spezifische Eigenschaften die es von anderen Standard-VMs unterscheiden>>>>>
Die VM wurde nur verschlankt, um weniger Platz zu verbrauchen--->> Dalvik hat derzeit keinen Just-in-Time-Compiler (JIT), aber Android 2.0 enthält experimentelle Quellen für einen solchen (standardmäßig deaktiviert). Der Konstanten-Pool wurde modifiziert, um nur 32-Bit-Indizes zu verwenden, um die den Interpreter zu vereinfachen. Er verwendet seinen eigenen Bytecode, nicht Java Bytecode*. * *
Dalvik VM kann keinen Java-Bytecode(.class) ausführen. Es muss(.dex) sein.
Oracle JVM hat eine Stack-basierte Architektur und Dalvik eine Register-basierte Architektur.
JVM-Unterstützung für mehrere Betriebssysteme. (es ist Open Source) aber DVM unterstützt für Android-Betriebssystem (vor kommen Android 5.o Android verwendet die DVM)
- See previous answers
- Weitere Antworten anzeigen