У чому різниця між DVM та JVM?


77

У чому різниця між віртуальною машиною Java та віртуальною машиною Dalvik?


8
Чому жодна відповідь не приймається?
Апурва

наш смартфон є dvm? чи емулятор?
Manoj Perumarath

Відповіді:


82

DVM заснований на реєстрі, який призначений для роботи з обмеженою пам’яттю, використовує власний байт-код і запускає файл .Dex

JVM заснований на стеку, який використовує байт-код Java і запускає файл .class, що має JIT.

Вихідний код Java компілюється компілятором Java у файли .class. Потім інструмент dx (dexer), частина Android SDK, обробляє файли .class у формат файлу під назвою DEX, що містить байт-код Dalvik. Інструмент dx усуває всю зайву інформацію, яка присутня в класах. У DEX усі класи програми упаковані в один файл. DVM розроблений таким чином, що пристрій може ефективно запускати кілька екземплярів віртуальної машини.

машини на основі стеку повинні використовувати інструкції для завантаження даних у стек та маніпулювання цими даними, і, отже, вимагати більше інструкцій, ніж машини для реєстрації, щоб реалізувати той самий код високого рівня, але інструкції в машині реєстру повинні кодувати регістри джерела та призначення і, отже, мають тенденцію бути більшими.


2
Хіба у нас немає обмеженого доступного реєстру?
roottraveller

30

Концептуально мало що відрізняється від рівня програми між DVM та JVM. В архітектурному плані існує велика різниця між DVM на основі реєстру та JVM на основі стеку.

Обидва використовують модель коду VM. Однак DVM використовує опирові коди на основі реєстру, які порівнянні з інструкціями байт-коду на основі реєстру, які більшість цільових платформ вже виконують. Сюди входять архітектури, такі як ті, що доступні від ARM та MIPS, та x86-сумісні архітектури від Intel, AMD та VIA Technologies.

Google розробив Android і вибрав DVM з кількох причин. По-перше, у більшості JVM були проблеми з ліцензуванням. Далі, DVM повинен бути більш ефективним з точки зору використання пам'яті та продуктивності на машині, що базується на регістрі. DVM також повинен бути більш ефективним при запуску декількох екземплярів DVM. Заявки отримують власний екземпляр. Отже, для кількох активних програм потрібні кілька екземплярів DVM. Як і більшість реалізацій Java, DVM має автоматичний збирач сміття.

Більше про це


7

Архітектура jvm базується на стеку, тоді як архітектура dvm базується на регістрі. Машини на основі стеку вимагають більше інструкцій (тобто більший набір інструкцій), ніж машини на основі реєстру для того самого завдання. З іншого боку, кожна інструкція в машинах, що базуються на регістрі, більша.


5

Коли віртуальна машина Java починає запускати програму, їй потрібна пам’ять для зберігання багатьох речей, включаючи байт-коди та іншу інформацію, яку вона витягує із завантажених файлів класів, об’єкти, які програма створює, параметри методів, повернені значення, локальні змінні та проміжні результати обчислень .

Віртуальна машина Java організовує пам’ять, необхідну для виконання програми, у кілька областей даних виконання.

Як правило, машини на основі стеку повинні використовувати інструкції для завантаження даних у стек і маніпулювання цими даними, і, отже, вимагати більше інструкцій, ніж машини для реєстрації, щоб реалізувати той самий код високого рівня, але інструкції в машині реєстру повинні кодувати джерело та регістри призначення і, отже, мають тенденцію бути більшими.

Ця різниця насамперед важлива для інтерпретаторів віртуальних машин, для яких відправлення коду операцій є дорогим, а інші фактори мають значення для компіляції JIT.

Оптимізований для низьких вимог до пам'яті, Dalvik має деякі специфічні характеристики, які відрізняють його від інших стандартних віртуальних машин >>>>>

Віртуальну машину просто скоротили, щоб зайняти менше місця --- >> На даний момент у Dalvik немає компілятора "точно в часі" (JIT), але Android 2.0 включає експериментальне джерело для одного (за замовчуванням вимкнено). Пул констант був змінений для використання лише 32-розрядних індексів для спрощення інтерпретатора. Він використовує власний байт-код, а не байт-код Java * * *


2
З Android 2.2 використовується JIT, з Android 5.0 (який замінив DVM на ART) використовується AOT, потім з Android 7.0 використовуються як AOT, так і JIT.
Джемшіт Іскендеров

3

Dalvik VM не може виконати байт-код Java (.class) Він повинен бути (.dex)

Oracle JVM має архітектуру на основі стеку, а Dalvik - архітектуру на основі реєстру.

Підтримка JVM для декількох операційних систем. (це з відкритим вихідним кодом), але DVM підтримується для операційної системи Android (до виходу android 5.o android використовував DVM)



0

Jvm працюватиме на основі байт-коду, а dvm працюватиме на основі оптимізованого байт-коду, він оптимізований для мобільних платформ, оскільки мобільні пристрої мають мало пам'яті та низький рівень процесів, тому він використовує ядро ​​Linux.


0

введіть тут опис зображення

Тут ми можемо отримати основну різницю між JVM (віртуальна машина Java) та DVM (віртуальна машина Dalvik). З рисунка видно, що DVM може запускати лише файли .dex. Компілятор Dex бере всі файли .class (може виконуватися JVM) для всіх класів, що належать програмі, і перетворює всі їх в один файл .dex. Пізніше файл .dex виконується DVM. Крім того, файли .class, отримані Javac (компілятором Java) із класу .java ->.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.