Рубрики
Без рубрики

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

Узнайте о различиях между виртуальной машиной Java (JVM) и виртуальной машиной Dalvik (DVM).

Автор оригинала: baeldung.

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, но они используют разные методы и процессы для компиляции и запуска кода.