2010-08-10 3 views

ответ

7

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

24

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

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

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

More about it

66

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

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

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

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

+1

У нас нет ограниченного числа доступных регистров? – roottraveller

0

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

4

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

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

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

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

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

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

+0

Из Android 2.2 JIT используется с Android 5.0 (который заменил DVM на ART) используется AOT, затем с Android 7.0 используются как AOT, так и JIT. –

Смежные вопросы