В чем разница между DVM и JVM? - PullRequest
       30

В чем разница между DVM и JVM?

71 голосов
/ 10 августа 2010

В чем разница между виртуальной машиной Java и виртуальной машиной Dalvik?

Ответы [ 6 ]

79 голосов
/ 12 октября 2011

DVM основан на регистре и предназначен для работы в нехватке памяти, использует свой собственный байт-код и запускает файл .Dex

JVM основан на стеке, который использует байт-код Java и запускает файл .class с JIT.1003 *

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

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

29 голосов
/ 10 августа 2010

Концептуально мало отличие от уровня приложения между DVM и JVM. Архитектурно, есть главный разница между регистрами DVM и основанная на стеке JVM.

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

Google разработала Android и выбрала DVM по нескольким причинам. Во-первых, были проблемы лицензирования с большинством JVM. Следующий, DVM должен быть более эффективным в сроки использования памяти и производительность на машине на основе регистра. DVM есть также должен быть более эффективным при запуске нескольких экземпляров DVM. Заявки выдаются своими пример. Следовательно, несколько активных приложения требуют нескольких DVM экземпляров. Как и большинство Java реализации, DVM имеет автоматический сборщик мусора.

Подробнее об этом

7 голосов
/ 10 августа 2010

Архитектура jvm основана на стеке, тогда как архитектура dvm основана на регистрах.Для машин на основе стека требуется больше инструкций (т. Е. Больший набор команд), чем для машин на основе регистров, для той же задачи.С другой стороны, каждая инструкция на машинах, основанных на регистрах, больше.

5 голосов
/ 27 июля 2013

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

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

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

Это различие в первую очередь важно для интерпретаторов VM, для которых диспетчеризация кода операции является дорогостоящей, а другие факторы имеют значение для компиляции JIT.

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

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

0 голосов
/ 29 июня 2018

DVM отличается от JVM по ряду причин. Во-первых, это на основе регистра машина, в отличие от стека на основе JVM. И вместо нескольких файлов классов упакованный в файл jar, DVM использует один исполняемый файл Dalvik (DEX) с различная структура и коды операций

0 голосов
/ 27 февраля 2013

Jvm будет работать на основе байт-кода, а dvm будет работать на основе оптимизированного байт-кода, он оптимизирован для мобильных платформ, поскольку у мобильных устройств мало памяти и мало процессов, поэтому он использует ядро ​​linux.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...