1. введение
В этой статье мы рассмотрим различия между виртуальной машиной Java (JVM) и виртуальной машиной Dalvik (DVM) . Сначала мы быстро рассмотрим каждый из них, а затем проведем сравнение.
Обратите внимание, что начиная с Android 5.0 виртуальная машина Dalvik была заменена Android Runtime (ART).
2. Что Такое Среда Выполнения?
Система выполнения предоставляет среду для перевода кода, написанного на языке высокого уровня, таком как Java, в машинный код и понятный центральному процессору (CPU).
Мы можем выделить следующие типы переводчиков:
- Ассемблеры: Они напрямую переводят коды сборки в машинный код, поэтому это быстро
- Компиляторы: Они переводят код в ассемблерный код, а затем используют ассемблеры для перевода полученного кода в двоичный код. Использование этой техники происходит медленно, но выполнение происходит быстро. Кроме того, результирующий машинный код зависит от платформы
- Интерпретаторы: Они переводят код во время его выполнения. Поскольку перевод происходит во время выполнения, выполнение может быть медленным
3. Виртуальная машина Java
JVM-это виртуальная машина для запуска настольных, серверных и веб-приложений Java . Еще одна важная особенность Java заключается в том, что она была разработана с учетом переносимости. Таким образом, JVM была сформирована также для поддержки нескольких архитектур хостов и запуска везде . Но он слишком тяжел для встроенных устройств.
Java имеет активное сообщество и будет продолжать широко использоваться в будущем. Кроме того, HotSpot-это эталонная реализация JVM. Кроме того, существует также более пяти других реализаций, поддерживаемых сообществом с открытым исходным кодом.
С новым выпуском на основе каденции Java и JVM получают новые обновления каждые шесть месяцев. Например, мы можем перечислить некоторые предложения для следующих выпусков, такие как Доступ к внешней памяти и Инструмент упаковки .
4. Виртуальная машина Dalvik
DVM-это виртуальная машина для запуска приложений Android. DVM выполняет байт-код Dalvik, который компилируется из программ, написанных на языке Java. Обратите внимание, что DVM не является JVM.
Один из ключевых принципов проектирования DVM заключается в том, что он должен работать на мобильных устройствах с низким объемом памяти и загружаться быстрее по сравнению с любой JVM. Кроме того, эта виртуальная машина более эффективна, когда она запускает несколько экземпляров на одном устройстве.
В 2014 году Google выпустила Android Runtime (ART) для Android 5, который заменил Dalvik для повышения производительности приложений и использования батареи. Последняя версия была 1.6.0 на Android 4.4.
5. Разница между JVM и DVM
5.1. Архитектура
JVM-это виртуальная машина на основе стека, в которой все арифметические и логические операции выполняются с помощью операндов push и pop, а результаты хранятся в стеке. Стек также является структурой данных для хранения методов.
В отличие от DVM, это виртуальная машина на основе регистров . Эти регистры, расположенные в процессоре, выполняют все арифметические и логические операции. Регистр-это структура данных для хранения операндов.
5.2. Компиляция
Код Java компилируется внутри JVM в промежуточный формат, называемый Байт-код Java (файлы.class). Затем JVM анализирует полученный байт-код Java и переводит его в машинный код .
На устройстве Android DVM компилирует код Java в промежуточный формат, называемый байт-кодом Java (файл.class), как в JVM. Затем с помощью инструмента под названием Dalvik eXchange или dx он преобразует байт-код Java в байт-код Dalvik . Наконец, DVM переводит байт-код Dalvik в двоичный машинный код .
Обе виртуальные машины используют компилятор Just-In-Time ( JIT )//. JIT-компилятор-это тип компилятора, который выполняет компиляцию во время выполнения.
5.3. Производительность
Как было показано ранее, JVM-это виртуальная машина на основе стека, а DVM-виртуальная машина на основе регистра. Байт-код виртуальной машины на основе стека очень компактен, поскольку расположение операндов неявно находится в стеке операндов. Байт-код виртуальной машины на основе регистров требует, чтобы все неявные операнды были частью инструкции. Это указывает на то, что размер кода на основе регистра обычно будет намного больше, чем байт-код на основе стека.
С другой стороны, виртуальные машины на основе регистров могут выражать вычисления с использованием меньшего количества инструкций виртуальной машины, чем соответствующая виртуальная машина на основе стека. Отправка инструкции виртуальной машины является дорогостоящей, поэтому сокращение числа выполняемых | инструкций виртуальной машины, вероятно, значительно повысит скорость работы виртуальной машины на основе регистров|/.
Конечно, это различие актуально только при запуске виртуальной машины в интерпретируемом режиме.
5.4. Исполнение
Хотя можно настроить экземпляр JVM для каждого запущенного приложения, обычно мы настраиваем только один экземпляр JVM с общими процессами и пространством памяти для запуска всех развернутых приложений.
Однако Android был разработан для запуска нескольких экземпляров виртуальных машин. Поэтому для запуска приложения или службы ОС Android создает новый экземпляр виртуальной машины с отдельным процессом в общей памяти и развертывает код для запуска приложения.
6. Заключение
В этом уроке мы представили основные различия между JVM и DVM. Обе виртуальные машины запускают приложения, написанные на Java, но они используют разные методы и процессы для компиляции и запуска кода.