Немного о JVM.
"Скомпилируй один раз, запускай хоть в другой Вселенной" - фраза, описывающая общую суть JVM языков.
Разберёмся подробнее как такое возможно:
1) Ключевой частью языка Java является компилятор javac, который преобразует исходный код программы в специальное промежуточное представление: байт-код, файлы с расширением .class. Такое промежуточное представление состоит из фиксированного набора инструкций, удобных для выполнения на виртуальной машине.
Важный момент: байт-код необязательно должен исполняться на Java машине, вы можете придумать свой формат и написать реализацию виртуальной машины для него.
2) Виртуальная машина Java - это всего лишь спецификация, описывающая набор инструкций байт-кода, типы данных, области памяти для выполнения программы и тд, конкретная реализация виртуальной машины зависит от архитектуры процессора, например Android ART чаще всего заточена под ARM процессоры.
Теперь посмотрим что JVM представляет из себя для разработчиков разных уровней:
Разработчики JVM. Под любое устройство, которое имеет память и процессор можно написать реализацию виртуальной машины для определенного байт-кода, конечно стоит учитывать набор доступных инструкций процессора для реализации всех возможных команд, а также достаточный объем памяти, но это уже детали.
Разработчики компиляторов JVM языков. Достаточно написать компилятор, который будет транслировать ваш язык в поддерживаемый виртуальной машиной байт-код и одна и та же программа уже адаптирована под все системы, для которых есть реализация этой самой виртуальной машины, например у Groovy есть компилятор groovyc для генерации JVM байт-кода.
Разработчики программ на JVM языках. Пишем один и тот же код и запускаем на всех возможных реализациях JVM, не вдаваясь в подробности архитектуры конкретного устройства и внутренних механизмов работы с памятью.
P.S. Понимание спецификации JVM и внутренних механизмов её работы никогда не будет лишним.
Пишите в комментах ваше мнение и всем хорошего кода!
Post #27
870

- 🔥 5