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