Was ist der Unterschied zwischen DVM und JVM?

Lesezeit: 4 Minuten

Benutzer-Avatar
anisch

Was ist der Unterschied zwischen Java Virtual Machine und Dalvik Virtual Machine?

  • Warum wird keine Antwort akzeptiert?

    – Apura

    20. Mai 2015 um 17:09 Uhr

  • ist unser smartphone ein dvm? oder der Emulator?

    – Manoj Perumarath

    3. Oktober 2018 um 9:46 Uhr

Benutzer-Avatar
Mayuri

DVM basiert auf Registern, die auf wenig Arbeitsspeicher ausgelegt sind, einen eigenen Bytecode verwenden und eine .Dex-Datei ausführen

JVM ist Stack-basiert, der Java-Byte-Code verwendet und eine .class-Datei mit JIT ausführt.

Java-Quellcode wird vom Java-Compiler in .class-Dateien kompiliert. Dann verarbeitet das dx (dexer)-Tool, Teil des Android SDK, die .class-Dateien in ein Dateiformat namens DEX, das Dalvik-Bytecode enthält. Das dx-Tool eliminiert alle redundanten Informationen, die in den Klassen vorhanden 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.

Stapelbasierte Maschinen müssen Anweisungen verwenden, um Daten auf den Stapel zu laden und diese Daten zu bearbeiten, 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 codieren und fallen daher tendenziell größer aus.

  • Haben wir nicht eine begrenzte Anzahl verfügbarer Register?

    – Wurzelreisender

    8. März 2016 um 7:23 Uhr

Benutzer-Avatar
DixonD

Konzeptionell besteht auf Anwendungsebene kaum ein Unterschied 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-Codemodell. Der DVM verwendet jedoch registerbasierte Opcodes, die mit den registerbasierten Bytecode-Anweisungen vergleichbar sind, die die meisten Zielplattformen bereits ausführen. Dazu gehören Architekturen wie die von ARM und MIPS erhältlichen und die x86-kompatiblen Architekturen von Intel, AMD und VIA Technologies.

Google hat Android entwickelt und sich aus mehreren Gründen für DVM entschieden. Erstens gab es bei den meisten JVMs Lizenzprobleme. Als nächstes sollte die DVM in Bezug auf Speichernutzung und Leistung auf einer registerbasierten Maschine effizienter sein. DVM soll auch effizienter sein, wenn mehrere Instanzen der DVM ausgeführt werden. Anwendungen erhalten eine eigene Instanz. Daher erfordern mehrere aktive Anwendungen mehrere DVM-Instanzen. Wie die meisten Java-Implementierungen verfügt die DVM über einen automatischen Garbage Collector.

Mehr dazu

Die jvm-Architektur ist stapelbasiert, während die dvm-Architektur registerbasiert ist. Stapelbasierte Maschinen benötigen für die gleiche Aufgabe mehr Anweisungen (dh einen größeren Befehlssatz) als registerbasierte Maschinen. Auf der anderen Seite ist jede Anweisung in den registerbasierten Maschinen größer.

Benutzer-Avatar
Schale

Wenn eine virtuelle Java-Maschine mit der Ausführung eines Programms beginnt, benötigt sie Speicher, um viele Dinge zu speichern, darunter Bytecodes und andere Informationen, die sie aus geladenen Klassendateien extrahiert, Objekte, die das Programm instanziiert, Parameter für Methoden, Rückgabewerte, lokale Variablen und Zwischenergebnisse von Berechnungen .

Die Java Virtual Machine organisiert den Speicher, den sie zum Ausführen eines Programms benötigt, in mehreren Laufzeitdatenbereichen.

Im Allgemeinen müssen stapelbasierte Maschinen Anweisungen verwenden, um Daten auf den Stapel zu laden und diese Daten zu manipulieren, und erfordern daher mehr Anweisungen als Registermaschinen, um den gleichen High-Level-Code zu implementieren, aber die Anweisungen in einer Registermaschine müssen die Quelle und codieren Zielregister und sind daher tendenziell größer.

Dieser Unterschied ist hauptsächlich für VM-Interpreter wichtig, für die der Opcode-Versand tendenziell teuer ist und andere Faktoren für die JIT-Kompilierung relevant sind.

Dalvik ist für geringe Speicheranforderungen optimiert und hat einige spezifische Merkmale, die es von anderen Standard-VMs unterscheiden>>>>>

Die VM wurde nur abgespeckt, 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 (standardmäßig deaktiviert). Der Konstantenpool wurde geändert, um nur 32-Bit-Indizes zu verwenden, um den Interpreter zu vereinfachen. Es verwendet seinen eigenen Bytecode, keinen Java-Bytecode***

Dalvik VM kann Java-Bytecode (.class) nicht ausführen Es muss (.dex) sein

Oracle JVM hat eine Stack-basierte Architektur und Dalvik hat eine Register-basierte Architektur.

JVM-Unterstützung für mehrere Betriebssysteme. (es ist Open Source), aber DVM wird für das Android-Betriebssystem unterstützt (vor dem kommenden Android 5.o verwendete Android das DVM)

Benutzer-Avatar
Manish Kumar Sharma

Hier ist ein tabellarischer Vergleich (Quelle: Herr Atul):

Geben Sie hier die Bildbeschreibung ein

Benutzer-Avatar
Ramesh

JVM arbeitet basierend auf Bytecode und dvm basiert auf optimiertem Bytecode. Es ist für mobile Plattformen optimiert, da mobile Geräte wenig Speicher und wenig Prozesse haben, weshalb es den Linux-Kernel verwendet.

1206570cookie-checkWas ist der Unterschied zwischen DVM und JVM?

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

Privacy policy