В этой статье мы увидим различия между виртуальной машиной Java и виртуальной машиной Dalvik.

Семь лет назад, когда я изучал программирование на Java, я задавал много вопросов себе и друзьям об этом чудесном языке, но большую часть времени возникал один вопрос, пока я не находил удовлетворительного ответа. Возник вопрос, почему байт-код Java может работать на любой машине или платформе и чем он отличается от другого кода? Ответить на этот вопрос мне тогда было нелегко, потому что я только начинал.

Итак, в этом руководстве я собираюсь ответить на следующие вопросы

  • JVM против DVM
  • Почему ОС Android использует DVM вместо JVM?

Виртуальная машина Java

Виртуальная машина Java (JVM) - это абстрактный слой между программой Java и платформой, на которой выполняется код Java. JVM зависит от платформы, и для конкретных платформ доступны разные реализации.

Например, если у вас есть класс Hello.java и когда вы запускаете этот файл класса, компилятор javac преобразует ваш исходный код в bytecode и создает файл Hello.class, что означает, что компилятор javac не преобразует код Java напрямую в машинный код, как это делает другой компилятор. Байт-код - это промежуточный код, что означает, что люди не могут понять этот код, и этот код не зависит от машины / платформы. Поскольку байт-код - это промежуточный код, поэтому вы можете передать его кому угодно для запуска на любой платформе, поэтому мы называем Java-приложения WORA (Write Once и Run Anywhere).

Как вы можете видеть на изображении выше, как только у вас будет готовый файл .class, вы можете передать его на любую платформу, и она преобразует его в собственный машинный код.

Виртуальная машина Dalvik

Виртуальная машина Dalvik (DVM) - это виртуальная машина, на которой выполняются приложения Android. Поскольку все в мобильных устройствах очень ограничено, будь то время автономной работы, обработка данных, память и т. Д., Он был оптимизирован так, чтобы он мог соответствовать маломощным устройствам.

Как видно из изображения выше, все такое же, как в JVM, за исключением двух последних шагов. Компилятор Dex преобразует файлы классов в файл .dex, который запускается на виртуальной машине Dalvik. Несколько файлов классов преобразуются в один файл dex.

JVM против DVM

Одна из основных причин использования DVM в Android заключается в том, что он следует модели на основе регистров и намного быстрее, чем модель на основе стека, в то время как JVM следует модели на основе стека, которая занимает много памяти, а также медленнее, чем DVM.

Есть некоторые существенные различия, поэтому давайте посмотрим на них.

Почему ОС Android использует DVM вместо JVM?

Есть несколько причин, по которым Google не выбирает JVM вместо DVM, поэтому давайте разберемся с каждой из них по очереди.

  • Хотя JVM бесплатна, она была под лицензией GPL, что не подходит для Android, поскольку большинство Android находится под лицензией Apache.
  • JVM была разработана для настольных компьютеров и слишком тяжелая для встраиваемых устройств.
  • DVM занимает меньше памяти, работает и загружается быстрее по сравнению с JVM.

- Государственный университет Огайо

Заключение

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

Подпишитесь на мой список рассылки, чтобы получить ранний доступ к моим статьям прямо в вашем почтовом ящике, и не забудьте подписаться на мою публикацию на Medium The Code Monster, чтобы отполировать свои технические знания.

Знай своего автора

Химаншу Верма окончил Университет доктора APJ Абдул Калама, Лакхнау (Индия). Он разработчик Android и IOS, изучающий машинное обучение и анализ данных, финансовый консультант и блоггер.