В чем разница между виртуальной машиной Java и виртуальной машиной Dalvik?В чем разница между DVM и JVM?
ответ
Архитектура jvm основана на стеке, тогда как архитектура dvm основана на регистре. Стационарные машины требуют больше инструкций (т. Е. Большего набора команд), чем машины на основе регистров для одной и той же задачи. С другой стороны, каждая инструкция в машинах с регистрами больше.
Концептуально, существует мало разницы от уровня приложений между DVM и виртуальной машиной Java. Архитектурно существует большая разница между регистром DVM и JVM на основе стека.
Оба используют модель кода VM. Однако, DVM использует регистровые коды операций, которые сопоставимы с инструкциями байт-кода на основе регистров , которые уже выполняют большинство целевых плат . Этот включает в себя архитектуры, такие как , доступные от ARM и MIPS, и x86-совместимые архитектуры от Intel, AMD и VIA Technologies.
Google разработал Android и выбрал DVM по нескольким причинам. Во-первых, были проблемы с лицензированием с большинством JVM. Далее, DVM должен быть более эффективным в условиях использования и производительности памяти на реестре. DVM также должен быть более эффективным при запуске нескольких экземпляров DVM. Приложению предоставляется собственный экземпляр . Следовательно, для нескольких активных приложений требуется несколько экземпляров DVM . Как и большинство реализаций Java , у DVM есть автоматический сборщик мусора .
DVM является регистрация на основе, которая предназначена для работы на низкой памяти, использует свой собственный байт-код и запускает .Dex файл
JVM является стек на основе, которая использует Java байт-код и работает. файл класса с JIT.
Исходный код Java скомпилирован компилятором Java в файлы .class. Затем инструмент dx (dexer), входящий в состав Android SDK, обрабатывает файлы .class в формате файла DEX, который содержит байт-код Dalvik. Инструмент dx устраняет всю избыточную информацию, присутствующую в классах. В DEX все классы приложения упакованы в один файл. DVM разработан таким образом, что устройство может эффективно запускать несколько экземпляров виртуальной машины.
Машины на основе стека должны использовать инструкции для загрузки данных в стек и управления этими данными и, таким образом, требуют больше инструкций, чем регистрационные машины, для реализации одного и того же кода высокого уровня, но инструкции на машине регистрации должны кодировать исходных и целевых регистров и, следовательно, имеют тенденцию быть более крупными.
У нас нет ограниченного числа доступных регистров? – roottraveller
Jvm будет работать на основе байтового кода, а dvm будет работать на основе оптимизированного байт-кода, который оптимизирован для мобильных платформ, поскольку мобильные устройства имеют низкую память и низкий уровень обработки, поэтому он использует ядро linux.
Когда виртуальная машина Java начать запуск программы, она нуждается в памяти для хранения много вещей, в том числе байткодов и другой информации, которую он извлекает из загруженных файлов классов, объекты программы конкретизирует, параметры методов, возвращаемые значения, локальные переменные и промежуточные результаты вычислений.
Виртуальная машина Java организует память, требуемую для выполнения программы в несколько областей данных времени выполнения.
Как правило, укладывают на основе машины должны использовать инструкции для загрузки данных в стек и управления этими данными, и, таким образом, требуют больше инструкций, чем регистровых машин реализовать один и тот же код на высоком уровне, но инструкции в регистрирующая машина должна кодировать регистры источника и получателя и, следовательно, иметь тенденцию быть больше.
Это различие в первую очередь имеет важное значение для переводчиков УМ, для которых код операции имеет тенденцию быть дорогостоящим, а другие факторы важны для компиляции JIT.
Будучи оптимизирован для низких требований к памяти, Dalvik имеет некоторые специфические характеристики , которые отличают его от других стандартных виртуальных машин >>>>>
ВМ просто облегченную вниз, чтобы использовать меньше места --- >> Dalvik (JIT), но Android 2.0 включает в себя экспериментальный источник для одного (по умолчанию отключен). Постоянный пул был изменен, чтобы использовать только 32-разрядные индексы, чтобы упростить интерпретатор . Он использует свой собственный байт-код, а не байт-код Java * * *
Из Android 2.2 JIT используется с Android 5.0 (который заменил DVM на ART) используется AOT, затем с Android 7.0 используются как AOT, так и JIT. –
- 1. В чем разница между JRE и JVM?
- 2. Разница между кластером и JVM
- 3. Разница между JVM и HotSpot?
- 4. Разница между PyPy и JVM
- 5. В чем разница между PermGen и Metaspace?
- 6. В чем разница между maven.plugin.classpath и maven.runtime.classpath
- 7. В чем разница между «java.vendor» и «java.vm.vendor»?
- 8. В чем разница между «и»?
- 9. В чем разница между `{}` и `[]`?
- 10. В чем разница между == и ===?
- 11. В чем разница между «+» и «\ +»?
- 12. В чем разница между + = и = +?
- 13. В чем разница между/* ... */и/** ... */
- 14. В чем разница между: и +:
- 15. В чем разница между $ {} и # {}
- 16. В чем разница между $ _. и $ _
- 17. В чем разница между = и: =
- 18. В чем разница между && и &?
- 19. В чем разница между $ {} и # {}?
- 20. В чем разница между + и%?
- 21. В чем разница между + = и = +
- 22. В чем разница между # {} $ {} и% {}?
- 23. В чем разница между «» и «»?
- 24. В чем разница между ['#'] и [. = '#']?
- 25. В чем разница между == ~ и! =?
- 26. В чем разница между «/» и «/ *»?
- 27. В чем разница между «./» и «../»?
- 28. В чем разница между {}()) и {})()
- 29. В чем разница между «'» и «»
- 30. В чем разница между «и«
Почему никто не отвечает? – Apurva