DVM basiert auf einem Register, das für die Ausführung mit wenig Arbeitsspeicher ausgelegt ist, einen eigenen Bytecode verwendet und eine .Dex-Datei ausführt
JVM ist stapelbasiert, verwendet Java-Bytecode und führt eine .class-Datei mit JIT aus.
Java-Quellcode wird vom Java-Compiler in .class-Dateien kompiliert. Anschließend verarbeitet das im Android SDK enthaltene Tool dx (dexer) 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 erfordern daher mehr Anweisungen als Registermaschinen, um denselben Code auf hoher Ebene zu implementieren, aber die Anweisungen in einer Registermaschine müssen die Quell- und Zielregister codieren und neigen daher dazu, größer zu sein.
Haben wir nicht die Anzahl der verfügbaren Register begrenzt?
Roottraveller
30
Konzeptionell gibt es kaum einen Unterschied zu einer Anwendungsebene zwischen einem DVM und einer JVM. Architektonisch gibt es einen großen Unterschied zwischen dem registergestützten DVM und der stapelbasierten JVM.
Beide verwenden ein VM-Codemodell. Der DVM verwendet jedoch registergestützte Opcodes, die mit den registergestützten Bytecode-Anweisungen vergleichbar sind, die die meisten Zielplattformen bereits ausführen. Dies umfasst Architekturen wie die von ARM und MIPS 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 der DVM in Bezug auf Speichernutzung und Leistung auf einem registergestützten Computer effizienter sein. DVM soll auch effizienter sein, wenn mehrere Instanzen des DVM ausgeführt werden. Anwendungen erhalten eine eigene Instanz. Daher erfordern mehrere aktive Anwendungen mehrere DVM-Instanzen. Wie die meisten Java-Implementierungen verfügt der DVM über einen automatischen Garbage Collector.
Die JVM-Architektur basiert auf Stapeln, während die DVM-Architektur auf Registern basiert. Stapelbasierte Maschinen erfordern mehr Befehle (dh einen größeren Befehlssatz) als registerbasierte Maschinen für dieselbe Aufgabe. Auf der anderen Seite ist jeder Befehl in den registergestützten Maschinen größer.
Wenn eine virtuelle Java-Maschine ein Programm ausführt, benötigt sie Speicher, um viele Dinge zu speichern, einschließlich Bytecodes und anderer 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 mehrere Laufzeitdatenbereiche.
Im Allgemeinen müssen stapelbasierte Maschinen Anweisungen verwenden, um Daten auf den Stapel zu laden und diese Daten zu bearbeiten, und erfordern daher mehr Anweisungen als Registermaschinen, um denselben Code auf hoher Ebene zu implementieren, aber die Anweisungen in einer Registermaschine müssen die Quelle und codieren Zielregister und sind daher tendenziell größer.
Dieser Unterschied ist vor allem für VM-Interpreter von Bedeutung, für die der Versand von Opcodes tendenziell teuer ist und andere Faktoren für die JIT-Kompilierung relevant sind.
Dalvik ist für niedrige Speicheranforderungen optimiert und weist einige spezifische Merkmale auf, die es von anderen Standard-VMs unterscheiden >>>>>
Die VM wurde nur verkleinert, um weniger Speicherplatz zu verbrauchen --- >> Dalvik hat derzeit keinen Just-in-Time-Compiler (JIT), aber Android 2.0 enthält eine experimentelle Quelle für eine (standardmäßig deaktiviert). Der Konstantenpool wurde so geändert, dass nur 32-Bit-Indizes verwendet werden, um den Interpreter zu vereinfachen. Es verwendet seinen eigenen Bytecode, keinen Java-Bytecode * * *
Ab Android 2.2 wird JIT verwendet, ab Android 5.0 (das DVM durch ART ersetzte) wird AOT verwendet, ab Android 7.0 werden sowohl AOT als auch JIT verwendet.
Jemshit Iskenderov
3
Dalvik VM kann keinen Java-Bytecode (.class) ausführen. Es muss (.dex) sein.
Oracle JVM verfügt über eine stapelbasierte Architektur und Dalvik über eine registergestützte Architektur.
JVM-Unterstützung für mehrere Betriebssysteme. (es ist Open Source), aber DVM unterstützt für Android-Betriebssystem (vor dem Kommen von Android 5.o Android verwendet das DVM)
Jvm funktioniert basierend auf Bytecode und dvm funktioniert basierend auf optimiertem Bytecode. Es ist für mobile Plattformen optimiert, da mobile Geräte wenig Arbeitsspeicher und wenig Prozess haben, weshalb Linux Linux verwendet wird.
Hier können wir den grundlegenden Unterschied zwischen der JVM (Java Virtual Machine) und der DVM (Dalvik Virtual Machine) feststellen. Aus der Abbildung geht hervor, dass DVM nur .dex-Dateien ausführen kann. Der Dex-Compiler verwendet alle .class-Dateien (kann von JVM ausgeführt werden) für alle Klassen, die zur Anwendung gehören, und konvertiert sie alle in eine einzelne .dex-Datei. Die spätere .dex-Datei wird von DVM ausgeführt. Zusätzlich werden von Javac (Java-Compiler) aus .java ->. Class .class-Dateien erstellt.
Antworten:
DVM basiert auf einem Register, das für die Ausführung mit wenig Arbeitsspeicher ausgelegt ist, einen eigenen Bytecode verwendet und eine .Dex-Datei ausführt
JVM ist stapelbasiert, verwendet Java-Bytecode und führt eine .class-Datei mit JIT aus.
Java-Quellcode wird vom Java-Compiler in .class-Dateien kompiliert. Anschließend verarbeitet das im Android SDK enthaltene Tool dx (dexer) 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 erfordern daher mehr Anweisungen als Registermaschinen, um denselben Code auf hoher Ebene zu implementieren, aber die Anweisungen in einer Registermaschine müssen die Quell- und Zielregister codieren und neigen daher dazu, größer zu sein.
quelle
Mehr dazu
quelle
Die JVM-Architektur basiert auf Stapeln, während die DVM-Architektur auf Registern basiert. Stapelbasierte Maschinen erfordern mehr Befehle (dh einen größeren Befehlssatz) als registerbasierte Maschinen für dieselbe Aufgabe. Auf der anderen Seite ist jeder Befehl in den registergestützten Maschinen größer.
quelle
Wenn eine virtuelle Java-Maschine ein Programm ausführt, benötigt sie Speicher, um viele Dinge zu speichern, einschließlich Bytecodes und anderer 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 mehrere Laufzeitdatenbereiche.
Im Allgemeinen müssen stapelbasierte Maschinen Anweisungen verwenden, um Daten auf den Stapel zu laden und diese Daten zu bearbeiten, und erfordern daher mehr Anweisungen als Registermaschinen, um denselben Code auf hoher Ebene zu implementieren, aber die Anweisungen in einer Registermaschine müssen die Quelle und codieren Zielregister und sind daher tendenziell größer.
Dieser Unterschied ist vor allem für VM-Interpreter von Bedeutung, für die der Versand von Opcodes tendenziell teuer ist und andere Faktoren für die JIT-Kompilierung relevant sind.
Dalvik ist für niedrige Speicheranforderungen optimiert und weist einige spezifische Merkmale auf, die es von anderen Standard-VMs unterscheiden >>>>>
Die VM wurde nur verkleinert, um weniger Speicherplatz zu verbrauchen --- >> Dalvik hat derzeit keinen Just-in-Time-Compiler (JIT), aber Android 2.0 enthält eine experimentelle Quelle für eine (standardmäßig deaktiviert). Der Konstantenpool wurde so geändert, dass nur 32-Bit-Indizes verwendet werden, um den Interpreter zu vereinfachen. Es verwendet seinen eigenen Bytecode, keinen Java-Bytecode * * *
quelle
Dalvik VM kann keinen Java-Bytecode (.class) ausführen. Es muss (.dex) sein.
Oracle JVM verfügt über eine stapelbasierte Architektur und Dalvik über eine registergestützte Architektur.
JVM-Unterstützung für mehrere Betriebssysteme. (es ist Open Source), aber DVM unterstützt für Android-Betriebssystem (vor dem Kommen von Android 5.o Android verwendet das DVM)
quelle
Hier ist ein tabellarischer Vergleich ( Quelle : Herr Atul ):
quelle
Jvm funktioniert basierend auf Bytecode und dvm funktioniert basierend auf optimiertem Bytecode. Es ist für mobile Plattformen optimiert, da mobile Geräte wenig Arbeitsspeicher und wenig Prozess haben, weshalb Linux Linux verwendet wird.
quelle
Hier können wir den grundlegenden Unterschied zwischen der JVM (Java Virtual Machine) und der DVM (Dalvik Virtual Machine) feststellen. Aus der Abbildung geht hervor, dass DVM nur .dex-Dateien ausführen kann. Der Dex-Compiler verwendet alle .class-Dateien (kann von JVM ausgeführt werden) für alle Klassen, die zur Anwendung gehören, und konvertiert sie alle in eine einzelne .dex-Datei. Die spätere .dex-Datei wird von DVM ausgeführt. Zusätzlich werden von Javac (Java-Compiler) aus .java ->. Class .class-Dateien erstellt.
quelle