JDK, JRE, JVM — Java: Настройка окружения
JVM (Java Virtual Machine) — Виртуальная машина отвечает за само выполнение кода. Она работает с байткодом (тем, что находится внутри файлов с расширением .class).
JRE (Java Runtime Environment) — окружение, необходимое для запуска Java-программ. Включает в себя стандартную библиотеку. В нее входят, как базовые пакеты lang, util, так и пакеты для работы с различными форматами, базами данных, пользовательским интерфейсом. JVM тоже часть JRE.
JDK (Java Development Kit) — набор программ для разработки. Именно его мы (или редактор) устанавливаем к себе на компьютер, чтобы заниматься разработкой на Java. Он включает в себя JRE, загрузчик кода java, компилятор javac, архиватор jar, генератор документации javadoc и другие утилиты, нужные во время разработки.
Write once, run anywhere
Java — компилируемый язык. Обычно, когда говорят про такие языки, подразумевают, что компилятор берет исходный код и превращает его в машинный код, заточенный под конкретную архитектуру (машинный код у разных архитектур разный) и операционную систему. Так происходит во многих си-подобных языках. На выходе получаются файлы, каждый из которых может запуститься только на своей комбинации архитектуры и операционной системы.
# Компиляция Go программы для двух разных комбинаций GOOS=linux GOARCH=arm go build path/to/file GOOS=windows GOARCH=amd64 go build path/to/file
Для запуска таких программ больше ничего не нужно. Достаточно перенести их на нужную систему и запустить штатными средствами. Такие программы работают очень быстро, так как оптимизированы под конкретные условия.
# Запуск на Windows hexlet.exe
Java устроена по-другому. Разработчики попытались обеспечить кроссплатформенность готовой программы, за счет введения виртуальной машины. Кроссплатформенность, способность программы запускаться на разных платформах (архитектура процессора и операционная система) без необходимости компилировать код под эти системы. Как это работает?
Ядро Java это JVM. Виртуальный процессор, со своим набором команд, который придумали создатели Java. Компилятор готовит код именно под эту единую JVM. Например, код:
for (int i = 2; i 1000; i++) for (int j = 2; j i; j++) if (i % j == 0) continue outer; > System.out.println (i); >
После компиляции превращается в:
JVM выполняет байткод построчно и транслирует его в реальный машинный код, специфичный для той архитектуры, на которой он запускается.
Открыть доступ
Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно
- 130 курсов, 2000+ часов теории
- 1000 практических заданий в браузере
- 360 000 студентов
Наши выпускники работают в компаниях:
JVM – что это? Как устроена виртуальная машина Java
Виртуальная машина Java («Java Virtual Machine» — JVM) — это основная часть платформы Java Runtime Environment (JRE), которая интерпретирует байт-код Java для запуска программ.
Одним из наиболее значительных преимуществ использования является использование JVM для запуска программы Java в любой операционной среде. В её основе реализуется принцип WORA (Write once, run anywhere — «написал один раз, запускай везде»), который сильно упростил процессы разработки.
Как правило, считается, что JVM имеет двойное определение — техническое и неформальное.
Техническое: JVM — это спецификация программы, которая обеспечивает среду выполнения кода Java.
Неофициальное: JVM запускает приложения Java, c помощью настроенных параметров для управления всеми программными ресурсами.
Что делает виртуальная машина Java
JVM выполняет две основные функции:
- позволяет запускать Java-программы на любом устройстве или в любой операционной системе;
- даёт доступ к управлению памятью программ и её оптимизации.
Поскольку JVM — это хорошо известная среда выполнения со стандартизированной конфигурацией, мониторингом и управлением, она естественным образом подходит для контейнерной разработки с использованием таких технологий, как Docker.
Роль Java Virtual Machine
Теперь давайте более подробно рассмотрим место виртуальной машины Java в выполняемых процессах.
Если вы внимательно посмотрите на схему, добавленную выше, то будет несложно догадаться, что JVM образует слой между операционной системой и программами Java.
Это означает, что скомпилированная Java-программа будет связываться с Java Virtual Machine, а JVM будет общаться с операционной системой, являясь своего рода посредником между скомпилированными файлами классов и операционной системой.
Файл .class и байт-код
Когда дело доходит до выполнения программы, главное, что интересует виртуальную машину Java — это определённый формат файла – .class.
Файлы классов содержат наполовину скомпилированный код, называемый байт-кодом, который в свою очередь предоставляет JVM инструкции, таблицу символов и другую вспомогательную информацию.
Архитектура виртуальной машины Java
Понять, что такое виртуальная машина Java, будет немного проще, если познакомиться с её архитектурой и тем, как она работает. Поэтому важно рассмотреть строение JVM и особенности её частей.
Java Virtual Machine состоит из трёх отдельных компонентов:
- загрузчик классов;
- область памяти;
- исполнительный механизм.
(4).jpg)
Загрузчики классов отвечают за динамическую загрузку файлов .class в виртуальную машину Java и сохранения байт-кода в области метода JVM, о которой мы поговорим чуть позже.
Загрузчик классов Java бывает трёх типов:
- BootStrap ClassLoader (Загрузчик классов начальной загрузки) — это машинный код, который запускает операцию, когда её вызывает JVM. Его задача — загрузить классы из папки rt.jar.
- Extension ClassLoader (Загрузчик классов расширений) является дочерним элементом Bootstrap ClassLoader и загружает расширения основных классов Java из каталога jre/lib/ext или любого другого каталога, на который указывает java.ext.dirs.
- System ClassLoader (Системный загрузчик классов) загружает классы, найденные в переменной среды CLASSPATH, -classpath или параметре командной строки -cp.
- Область памяти
Область памяти или, как её ещё называют, область данных времени выполнения JVM состоит из 5 частей:
- Область метода предназначена для хранения данных файлов .class: например, метаданные, данные полей и методов, а также код метода. Область метода создаётся автоматически при запуске виртуальной машины, и для каждой ВМ существует только одна область метода.
- Область кучи. В куче хранятся все объекты и соответствующие им переменные экземпляра. Когда мы создаём новый экземпляр класса, он сразу же загружается в область кучи, которая остается единственной во время выполнения задачи.
- Область стека. В неё загружаются все локальные переменные, вызовы методов и частичные результаты.
- Регистры ПК. В регистре ПК хранится адреса виртуальных машин Java, выполняющих операцию в данный момент. В Java каждый поток получает свой собственный регистр ПК.
- Стеки нативных методов. Нативные методы — это методы, написанные на C или C++. Виртуальная машина JVM хранит стеки, которые поддерживают такие методы, с отдельным стеком собственных методов, выделенным для каждого потока.
- Исполнительный механизм
Этот тип программного обеспечения используется для тестирования оборудования и программного обеспечения. При этом он не сохраняет никакой информации о тестируемом продукте.
- интерпретатора;
- JIT-компилятора;
- сборщика мусора.
Перед выполнением программы интерпретатор и компилятор JIT («Just-in-time» — «точно в нужное время») преобразуют байт-код в машинные инструкции. Интерпретатор делает это построчно.
В тот момент, когда в сценарии обнаруживается повторяющийся код, к нему подключается JIT-компилятор для ускорения операции. Затем он компилирует байт-код и заменяет его собственным кодом. Такой процесс повышает производительность всей системы.
Но за что же в таком случае отвечает сборщик мусора? В некоторых других языках программирования (таких как C++) освобождение памяти от объектов без циклических ссылок зависит лишь от самого программиста. Однако в JVM этим занимается сборщик мусора, что оптимизирует использование памяти.
Важно отметить, что сборка мусора выполняется в JVM автоматически через определённые отрезки времени и не требует отдельного внимания специалистов. Конечно, этот процесс можно попробовать принудительно запустить, вызвав System.gc(), но нет никакой гарантии, что это сработает.
Заключение
Несмотря на то, что виртуальная машина Java изначально предназначалась только для запуска и выполнения программ Java, на сегодняшний день она способна поддерживать многие языки сценариев и программирования, что лишь укрепило популярность данной платформы.
В этой статье мы познакомились с виртуальной машиной Java, её архитектурой и основными компонентами, а также поговорили о месте JVM в запрашиваемых системой операциях.
«Виртуальная» машина Java – что это и с чем ее едят?
Программисты используют язык Java для формирования ПО разной сложности и задач. Но знают ли они, что происходит после начала компиляции готового кода?
Базовые понятия
Для простоты восприятия необходимо ввести несколько определений, которые не только приоткроют завесу таинственности, но и сократит дальнейшее повествование:
- Virtual Machine – несуществующее вычислительное устройство, реализуемое аппаратно, либо же программно. Процесс компиляции в исполняющие команды аналогичны работе микропроцессора.
- Java Platform – совокупность классов и VM составляют основу для платформы. Придает любой программе стандартный интерфейс вне зависимости от операционной системы.
- Java Virtual Machine – вычислительная машина, состоящая из набора регистров, базовых команд, стека и «хранилище». Основная задача – интерпретация кодинга ПО в байт-код.
- Java bytecode – разновидность машинного кода, который генерируется оригинальным компилятором. Выполнение прописанных команд происходит силами встроенного интерпретатора. Назван так из-за длины стандартной команды от JVM, а именно – 1 байт.
Почему именно «byte»?
JVM не требует путанной адресности для каждой ячейки памяти и большого количества регистров. Что это дает? Команды становятся короткими, легче и быстрее обрабатываются компилятором.
Программное обеспечение компилируется в код, который помещается в файлы специфического расширения. Таким образом реализуется главный принцип технологии, заложенный создателями: «Write on, run anywhere».
В чем секрет универсальности?
Абстрактная машина – маленький винтик до мелочей отлаженной среды исполнения Java Runtime Environment. Многие будут в шоке, узнав, что для каждой ОС и архитектуры ЦПУ нужна собственная JRE. В чем же секрет? «Переносимость» достигла нынешнего уровня только за счет множественных вариаций исполнительной среды. Стоит ли говорить, что запустить Java без JRE невозможно?
Популярности вагончик тронулся…
Кросс-платформенность, эффективность и безопасность сделали технологию Java востребованной. Да не просто нужной, а одной из самых популярных в мире. Сегодня более 2,5 млрд. устройств используют труды компании Sun Microsystem.
Всесторонняя разработка и улучшение сделали из локального успеха мировой бренд. Трудно найти человека, который бы не слышал слово «Java», пусть и из Minecraft-а. Если говорить о перспективах, то каждый год ставит перед разработчиками новые вызовы, отвечать на которые лучше кропотливой работой.
Виртуальная машина Java
В этой статье мы расскажем, что такое виртуальная машина Java и как ее установить.
Что такое виртуальная машина Java и для чего она нужна
Виртуальная машина Java (JVM) — это ключевой компонент платформы Java. С ее помощью можно запускать программы Java и продукты, написанные с применением байт-кода. А также она помогает управлять ресурсами программ во время их выполнения.
Перед тем как мы будем подробнее рассматривать виртуальную машину, разберем, что такое байт-код.
Сам по себе процессор — это сложный калькулятор. У него есть множество ячеек памяти, между которыми проводятся различные математические и байтовые операции. Как проводить каждую операцию, какой будет последовательность действий и какие данные нужны для операции ― всё это записано в машинном коде. Машинный код — это единственный язык, который понимает процессор любого компьютера.
Если бы все процессоры работали с помощью одинаковых машинных кодов, при разработке программ не нужно было подстраиваться под каждую систему. Достаточно было бы выучить один «машинный язык» и с его помощью удалось бы общаться со всеми процессорами. Однако в реальности процессоры «говорят» на разных языках. Языки могут отличаться:
- архитектурой CISC и RISC,
- длиной команд,
- режимом адресации,
- сложностью кодировок инструкций.
Из-за этих различий программы, созданные для одной архитектуры (или одного поколения процессоров), не работают на другой. Поэтому разработчикам приходится перекомпилировать программы для работы на других компьютерах.
Чтобы решить эту проблему, был создан байт-код — своеобразный промежуточный код между машинными языками. Прочитать байт-код может виртуальная машина Java.
Когда вы запускаете приложение Java на компьютере, байт-код программы попадает на JVM. Интерпретатор в виртуальной машине компилирует байт-код программы в понятный для процессора машинный код. Таким образом, одна программа, созданная на Java, может открываться на разных процессорах.
Как установить виртуальную машину Java
Существует два продукта, с помощью которых можно создать ВМ:
- Java Runtime Environment (JRE) ― виртуальная машина и API. Подходит, если вы хотите использовать готовые программы на Java.
- Java Development Kit (JDK) ― виртуальная машина, API и средства разработки программ на Java. Нужна тем, кто планирует писать свои Java-программы.
Как установить JRE
Чаще всего JRE уже есть на многих устройствах. Поэтому перед тем как устанавливать JRE проверьте, есть ли она на устройстве. Для этого зайдите в терминал и введите команду:
java -version
Команда для всех операционных систем одинаковая. Если на вашем устройстве установлена Java, перед вами появится сообщение о версии программы:

Если нет, то в сообщение будет ошибка или система скажет, что не знает такой команды. В таком случае вам понадобится установить JRE самостоятельно.
Установка ВМ на разных операционных системах похожа. В качестве примера покажем установку на macOS.

В зависимости от вашей операционной системы загрузите установочный файл с официального сайта. Например, если вам нужна виртуальная машина Java для Windows 10 x64, выберите пункт, показанный на картинке ниже:

Откройте папку со скачанным файлом и дважды кликните по нему:

Так как файл скачан из интернета, система попросит у вас разрешение на установку:

Затем система попросит ввести пароль пользователя. Введите его и нажмите OK:

Нажмите Install:
Затем пройдите по подсказкам на экране.
Готово, вы установили Java.
Как установить JDK
Скачайте установочный файл с официальной страницы.

Запустите установку:

Нажмите Продолжить:

Нажмите Установить:

Готово, программа установлена. Нажмите Закрыть:
Помогла ли вам статья?
Спасибо за оценку. Рады помочь
