В чем разница между виртуальной машиной Java и виртуальной машиной Dalvik?
В чем разница между DVM и JVM?
Ответ 1
DVM основан на реестре, который предназначен для работы в малой памяти, использует свой собственный байтовый код и запускает .Dex файл
JVM основан на стеках, который использует java-байтовый код и запускает файл .class с JIT.
Исходный код Java скомпилирован компилятором Java в файлы .class. Затем инструмент dx (dexer), входящий в состав Android SDK, обрабатывает файлы .class в формате DEX, который содержит байт-код Dalvik. Инструмент dx устраняет всю избыточную информацию, присутствующую в классах. В DEX все классы приложения упаковываются в один файл. DVM был разработан таким образом, что устройство может эффективно запускать несколько экземпляров виртуальной машины.
машины на основе стека должны использовать инструкции для загрузки данных в стек и управления этими данными и, таким образом, требуют большего количества инструкций, чем регистрационные машины, для реализации одного и того же кода высокого уровня, но инструкции на машине регистрации должны кодировать источник и регистры назначения и, следовательно, имеют тенденцию быть более крупными.
Ответ 2
Концептуально мало отличие от уровня приложения между DVM и JVM. Архитектурно, есть главный разница между регистром DVM и JVM на основе стека.
Оба используют модель кода VM. Однако DVM использует регистровые коды операций, которые сопоставимы с основанной на регистре байт-кода, что большая часть целевые платформы уже выполняются. Эта включает такие архитектуры, как те доступный от ARM и MIPS и x86-совместимые архитектуры от Intel, AMD и VIA Technologies.
Google разработал Android и выбрал DVM по нескольким причинам. Во-первых, вопросы лицензирования с большинством JVM. Следующий, DVM должен быть более эффективным в условия использования и производительности памяти на машине на основе регистров. DVM - это также должны быть более эффективными при запуске нескольких экземпляров DVM. Заявки предоставляются на пример. Следовательно, несколько активных приложения требуют множественного DVM экземпляров. Как и большинство Java реализации, DVM имеет автоматический сборщик мусора.
Ответ 3
Архитектура jvm основана на стеках, тогда как архитектура dvm основана на реестре. Стационарные машины требуют больше инструкций (т.е. Большего набора команд), чем машины на основе регистров для одной и той же задачи. С другой стороны, каждая инструкция в машинах с регистрами больше.
Ответ 4
Когда виртуальная машина Java запускает программу, ей требуется память для хранения многие вещи, включая байт-коды и другую информацию, которую он извлекает из загруженных файлов классов, объектов, создаваемых программой, параметров для методы, возвращаемые значения, локальные переменные и промежуточные результаты вычислений.
Виртуальная машина Java организует память, требуемую для выполнения программы в несколько областей данных времени выполнения.
Обычно машины на основе стека должны использовать инструкции для загрузки данных в стеке и манипулировать этими данными и, следовательно, требовать больше инструкций, чем регистрировать машины для реализации одного и того же кода высокого уровня, но инструкции в машине регистрации необходимо закодировать исходные и целевые регистры и, следовательно, имеют тенденцию быть больше.
Это различие в первую очередь имеет важное значение для переводчиков УМ, для которых код операции рассылка имеет тенденцию быть дорогой, и другие факторы имеют отношение к компиляции JIT.
Будучи оптимизированным для низких требований к памяти, Dalvik имеет некоторые специфические характеристики которые отличает его от других стандартных виртуальных машин → → >
VM просто уменьшилась, чтобы использовать меньше места --- → В настоящее время у Dalvik нет компилятора "точно в срок" (JIT), но Android 2.0 включает экспериментальный источник для одного (по умолчанию отключен). Постоянный пул был изменен, чтобы использовать только 32-разрядные индексы для упрощения переводчика. Он использует собственный байт-код, а не байт-код *** ***
Ответ 5
Jvm будет работать на основе байтового кода, а dvm будет работать на основе оптимизированного байт-кода, который оптимизирован для мобильных платформ, потому что мобильные устройства имеют низкую память и низкий процесс, поэтому использует ядро linux.
Ответ 6
DVM отличается от JVM несколькими способами. Во-первых, это машина на основе регистров, в отличие от стековой JVM. И вместо нескольких файлов классов, связанных в JAR файл, DVM использует один исполняемый файл Dalvik (DEX) с другой структурой и кодами операций.
Ответ 7
Вот табличное сравнение (Источник: Мистер Атул):