Что такое JRE? Введение в среду выполнения Java

Вместе Java Development Kit (JDK), виртуальная машина Java (JVM) и Java Runtime Environment (JRE) образуют мощную тройку компонентов платформы Java для разработки и выполнения приложений Java. Ранее я представил JDK и JVM. В этом кратком руководстве вы узнаете о JRE, среде выполнения для Java.

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

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

Мы более подробно рассмотрим, как эти компоненты работают вместе, в следующих разделах.

Установка JDK, JRE и JVM

С точки зрения установки, каждый раз, когда вы загружаете JDK, он будет включать JRE, совместимую с версией, и эта JRE будет включать JVM по умолчанию. Вы также можете загрузить JRE отдельно от JDK, и вы можете выбирать из множества JVM. Значения по умолчанию подходят для большинства реализаций, особенно когда вы начинаете работать с Java.

Что такое среда выполнения?

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

WORA для Java

Когда он был впервые представлен, принцип Java «пиши один раз, запускай где угодно» считался революционным, но сегодня он принят как норма для большинства программных систем.

Среда выполнения Java

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

JRE сглаживает разнообразие операционных систем, гарантируя, что программы Java могут работать практически в любой ОС без изменений. Он также предоставляет услуги с добавленной стоимостью. Автоматическое управление памятью - одна из самых важных служб JRE, гарантирующая, что программистам не придется вручную контролировать выделение и перераспределение памяти.

Короче говоря, JRE - это своего рода мета-ОС для программ Java. Это классический пример абстракции , абстрагирования базовой операционной системы в согласованную платформу для запуска приложений Java.

Как JRE работает с JVM

Виртуальная машина Java - это работающая программная система, отвечающая за выполнение живых программ Java. JRE - это дисковая система, которая берет ваш Java-код, объединяет его с необходимыми библиотеками и запускает JVM для его выполнения.

JRE содержит библиотеки и программное обеспечение, необходимое для запуска ваших программ Java. Например, загрузчик классов Java является частью среды выполнения Java. Эта важная часть программного обеспечения загружает скомпилированный код Java в память и соединяет код с соответствующими библиотеками классов Java.

В только что описанном многоуровневом представлении JVM создается JRE. С точки зрения пакета, JRE содержит JVM, как показано на экране 1.

Мэтью Тайсон

Установка и использование JRE

Хотя у JRE есть концептуальная сторона, на практике это просто программное обеспечение, установленное на компьютере, целью которого является запуск ваших программ Java. Как разработчик, вы в основном будете работать с JDK и JVM, потому что это компоненты платформы, которые вы используете для разработки и выполнения своих программ Java. Как пользователь приложения Java, вы больше вовлечены в JRE, которая позволяет запускать эти программы.

В большинстве случаев ваш компьютер будет поставляться с установленной Java, и JRE будет включена вместе с ней. Если вам когда-либо понадобится установить или обновить вручную, вы можете загрузить текущую версию JRE из Oracle.

Версии JRE

Среда выполнения Java обновляется для каждой новой версии Java, а номера ее версий соответствуют системе управления версиями платформы Java, поэтому, например, JRE 1.8 запускает Java 8. Хотя у вас есть множество пакетов JDK на выбор (например, Enterprise Edition или Standard Edition), что не относится к JRE. На большинстве компьютеров установлена ​​среда JRE, разработанная для Java SE, которая может запускать любое приложение Java независимо от того, как оно было разработано. Большинство мобильных устройств поставляются с JRE для Java ME, которая предварительно установлена ​​на мобильном устройстве и недоступна для загрузки.

После установки JRE вы можете взаимодействовать с ней в командной строке, введя команду  java -version, которая сообщит вам, какая версия установлена. В системах POSIX вы всегда можете проверить установленное местоположение с помощью which java.

JRE в DevOps

JRE не очень заметна на стадии разработки, где она в основном просто запускает ваши программы в ОС или IDE по вашему выбору. JRE играет немного более важную роль в DevOps и системном администрировании, потому что он используется для мониторинга и настройки.

По сути, JRE предоставляет «ручки», которые вы использовали бы для настройки и управления характеристиками Java-приложения. Использование памяти - яркий пример, хлеб с маслом для системного администрирования. Хотя использование памяти всегда важно, оно жизненно важно в облачных конфигурациях, а DevOps - это облачная технология. Если вы работаете в среде DevOps или хотите перейти на DevOps, неплохо было бы понять, как работает память Java и как она отслеживается в JRE.

Девопс или сисадмин?

Devops - это новый термин, но он описывает то, что было верным на протяжении десятилетий, а именно совместимость разработки и эксплуатации. В этом смысле DevOps - это просто новый термин для того, что раньше называлось операциями или системным администрированием. Как и системный администратор, важным аспектом DevOps является администрирование систем, необходимых для работы программного обеспечения. Управление JRE - это часть системы управления, запускающей приложения Java.

Память Java и JRE

Память Java состоит из трех компонентов: кучи, стека и метапространства (которое ранее называлось permgen).

  • В Metaspace Java хранит неизменную информацию о вашей программе, такую ​​как определения классов.
  • Пространство кучи - это место, где Java хранит переменное содержимое.
  • Пространство стека - это место, где Java хранит выполнение функций и ссылки на переменные.

Управление памятью в Java 8

До Java 8 метапространство называлось permgen. Metaspace - это не только более крутое имя, но и существенное изменение того, как разработчики взаимодействуют с пространством памяти Java. Раньше вы использовали эту команду java -XX:MaxPermSizeдля отслеживания размера перманентного пространства. Начиная с Java 8, Java автоматически увеличивает размер метапространства, чтобы удовлетворить мета-потребности вашей программы. В Java 8 также появился новый флаг, MaxMetaspaceSizeкоторый можно использовать для ограничения размера метапространства.

Другие параметры памяти, куча и стек, в Java 8 остаются такими же.

Настройка пространства кучи

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

Настройка пространства стека

В стеке ставятся в очередь вызовы функций и ссылки на переменные. Пространство стека является источником второй по значимости ошибки в программировании на Java: исключение переполнения стека (первое - исключение нулевого указателя). Исключение переполнения стека указывает на то, что вы бежите из стека , потому что слишком много было зарезервировано. Обычно вы получаете переполнение стека, когда метод или методы вызывают друг друга по кругу, тем самым выделяя постоянно растущее количество вызовов функций в стек.

Вы используете -Xssпереключатель для настройки начального размера стека. Затем стек динамически увеличивается в соответствии с потребностями программы.

Мониторинг приложений Java

Хотя мониторинг приложений является функцией JVM, JRE предоставляет параметры конфигурации, которые являются необходимой базой для мониторинга. Для мониторинга приложений Java доступны различные инструменты, от классических (таких как команда Unix top) до сложных решений удаленного мониторинга, таких как мониторинг инфраструктуры Oracle.

Между этими параметрами находятся визуальные профилировщики, такие как VisualVM, которые позволяют проверять работающую JVM. Эти инструменты позволяют отслеживать точки доступа и утечки памяти, а также отслеживать общее потребление памяти в вашей системе.

Заключение

Среда выполнения Java - это программа на диске, которая загружает приложения Java для выполнения JVM. JRE включается по умолчанию при загрузке Java Development Kit, и каждая JRE включает в себя основные библиотеки классов Java, загрузчик классов Java и виртуальную машину Java. Полезно понять, как взаимодействуют JVM, JDK и JRE, особенно для работы в облаке и средах DevOps. В этих средах JRE играет более важную роль в мониторинге и настройке, чем в традиционной разработке приложений Java.

Этот рассказ «Что такое JRE? Введение в среду выполнения Java» был первоначально опубликован JavaWorld.