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

Обновлено: 21.11.2024

Хотя императивное программирование часто используется, декларативный подход оказался полезным перед лицом требований к сложным, .

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

IDP могут предоставить продуктивную и безопасную среду для групп разработчиков. Рассмотрите все за и против, чтобы увидеть, является ли внутренний .

Разрастание UX-дизайна имитирует разрастание городов как в стремлении к росту, так и в потенциально опасных подводных камнях. Вот несколько вещей .

Запах кода может стать причиной плохого кодирования в угольной шахте. А плохое кодирование — это признак того, что требуется рефакторинг. Давайте .

Чтобы успешно передать Agile-разработку на аутсорсинг, организации должны уделять первоочередное внимание общению и обеспечивать достаточную адаптацию.

Чтобы добиться высокой доступности и отказоустойчивости в AWS, ИТ-администраторы должны сначала понять различия между двумя моделями.

Amazon ECS и EKS похожи, но их различий достаточно, чтобы выделить их для пользователей AWS. Узнайте, что лучше всего подходит для вашего .

Новые дополнения к системам хранения, такие как гибкие блочные тома и высокая доступность для ZFS, делают облачную платформу Oracle более конкурентоспособной.

Скомпрометированный аккаунт сотрудника в HubSpot привел к взлому клиентов нескольких компаний в индустрии криптовалют.

По мере того, как облачные сервисы становятся все более важными, группы безопасности усиливают корпоративную защиту. Нулевое доверие — с учетом активов, таких как .

Популярный пакет JavaScript был саботирован его разработчиком и содержал сообщения в поддержку Украины, что превратилось в .

Считаете, что готовы к сертификационному экзамену AWS Certified Solutions Architect? Проверьте свои знания, ответив на эти 12 вопросов и.

Amazon заявила, что ее система мониторинга микроавтобусов предназначена исключительно для обеспечения безопасности водителей. Но многие отраслевые эксперты обеспокоены этим.

Amazon хотела бы укрепить свое глобальное присутствие, но гигант электронной коммерции сегодня сталкивается с препятствиями и проблемами, которых у него не было.

Узнайте, что делает среда выполнения Java (JRE) и как она взаимодействует с другими компонентами платформы Java для запуска приложений Java.

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

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

JRE — это один из трех взаимосвязанных компонентов для разработки и выполнения программ Java. Два других компонента следующие:

  • Комплект Java Development Kit, или JDK, представляет собой набор инструментов для разработки приложений Java. Разработчики выбирают JDK по версии Java, а также по пакету или выпуску — Java Enterprise Edition (Java EE), Java Special Edition (Java SE) или Java Mobile Edition (Java ME). Каждый пакет JDK всегда содержит совместимую среду JRE, поскольку выполнение программы Java является частью процесса разработки программы Java.
  • Виртуальная машина Java, или JVM, выполняет живые приложения Java. Каждая JRE включает JRE по умолчанию, но разработчики могут выбрать другую, отвечающую конкретным потребностям их приложений в ресурсах.

JRE объединяет код Java, созданный с помощью JDK, с необходимыми библиотеками, необходимыми для его запуска на JVM, а затем создает экземпляр JVM, выполняющий полученную программу. JVM доступны для нескольких операционных систем, и программы, созданные с помощью JRE, будут работать на всех из них. Таким образом, Java Runtime Environment — это то, что позволяет Java-программе работать в любой операционной системе без изменений.

Как работает JRE?

Загрузчик классов

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

Проверка байт-кода

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

Переводчик

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

Из чего состоит JRE?

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

Решения для развертывания

В состав установки JRE входят такие технологии развертывания, как Java Web Start и Java Plugin, которые упрощают активацию приложений и обеспечивают расширенную поддержку будущих обновлений Java.

Инструменты разработки

JRE также содержит наборы инструментов, призванные помочь разработчикам улучшить их пользовательский интерфейс. Некоторые из этих наборов инструментов включают:

  • Java 2D: интерфейс прикладного программирования (API), используемый для рисования двухмерной графики на языке Java. Разработчики могут создавать многофункциональные пользовательские интерфейсы, специальные эффекты, игры и анимацию.
  • Abstract Window Toolkit (AWT): GUI (графический пользовательский интерфейс), используемый для создания объектов, кнопок, полос прокрутки и окон.
  • Swing: еще один упрощенный графический интерфейс, в котором используется богатый набор виджетов, предлагающий гибкие и удобные настройки.

Библиотеки для интеграции

Java Runtime Environment предоставляет ряд интеграционных библиотек, помогающих разработчикам создавать бесшовные соединения данных между их приложениями и службами. Некоторые из этих библиотек включают:

  • Java IDL (CORBA): использует общую архитектуру запросов объектов для поддержки распределенных объектов, написанных на языке программирования Java.
  • Java Database Connectivity (JDBC) API: Предоставляет разработчикам инструменты для написания приложений с доступом к удаленным базам данных взаимосвязей, однородным файлам и электронным таблицам.
  • Java Naming and Directory Interface (JNDI): интерфейс программирования и служба каталогов, которые позволяют клиентам создавать переносимые приложения, которые могут извлекать информацию из баз данных, используя соглашения об именах.

Язык и служебные библиотеки

В состав JRE входит java.lang. и java.util. пакеты, лежащие в основе проектирования приложений Java, управления версиями пакетов, а также мониторинга. Некоторые из этих пакетов включают:

  • Collections Framework: унифицированная архитектура, состоящая из набора интерфейсов, предназначенных для улучшения хранения и обработки данных приложения.
  • Утилиты параллелизма. Мощный фреймворк с высокопроизводительными утилитами многопоточности.
  • Preferences API: упрощенный кроссплатформенный постоянный API, который позволяет нескольким пользователям на одном компьютере определять свою собственную группу настроек приложения.
  • Ведение журнала: создание отчетов журнала, таких как сбои безопасности, ошибки конфигурации и проблемы с производительностью, для дальнейшего анализа.
  • Архив Java (JAR): независимый от платформы формат файла, который позволяет объединять несколько файлов в формате JAR, значительно повышая скорость загрузки и уменьшая размер файла.

JRE и IBM

JRE и IBM Cloud

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

Вместе Java Development Kit (JDK), виртуальная машина Java (JVM) и среда выполнения Java (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.

Мэттью Тайсон

Рис. 1. Представление многоуровневой архитектуры показывает, что JRE содержит JVM, загрузчик классов и библиотеки классов Java

Установка и использование 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 вы всегда можете проверить место установки, с которым java .

JRE в DevOps

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

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

Devops или системный администратор?

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

Память Java и JRE

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

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

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

До Java 8 метапространство называлось permgen. Помимо того, что это гораздо более крутое имя, метапространство представляет собой существенное изменение в том, как разработчики взаимодействуют с пространством памяти Java. Раньше вы использовали команду java -XX:MaxPermSize для отслеживания размера пространства permgen. Начиная с 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 .

Мэттью Тайсон – основатель Dark Horse Group, Inc. Он верит в технологии, ориентированные на людей. Когда Мэтт не играет на гитаре, он исследует отдаленные районы и философские глубинки. Он пишет для JavaWorld с 2007 года.

В этом разделе содержится основная информация о Java и JRE.

Что такое среда программирования Java?

Java — это недавно разработанная параллельная среда объектно-ориентированного программирования и выполнения на основе классов, состоящая из:

Язык программирования

Спецификация API

Спецификация виртуальной машины

Java обладает следующими характеристиками:

Объектно-ориентированный. Java предоставляет базовую объектную технологию C++ с некоторыми улучшениями и некоторыми исключениями.

Архитектурно-независимый — исходный код Java компилируется в архитектурно-независимый объектный код. Код объекта интерпретируется виртуальной машиной Java (JVM) в целевой архитектуре.

Переносимость — Java реализует дополнительные стандарты переносимости. Например, int всегда являются 32-битными целыми числами с дополнением до 2. Пользовательские интерфейсы создаются с помощью абстрактной оконной системы, которая легко реализуется в Solaris и других операционных средах.

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

Безопасность. Функции языков C и C++, которые часто приводят к несанкционированному доступу к памяти, отсутствуют в языке Java. Интерпретатор также применяет несколько тестов к скомпилированному коду для проверки наличия недопустимого кода. После этих тестов скомпилированный код не вызывает переполнения стека операндов или потери значимости, не выполняет недопустимых преобразований данных, выполняет только разрешенный доступ к полям объекта, а все типы параметров кода операции проверяются как допустимые.

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

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

Динамический — Java не связывает вызываемые модули до выполнения.

Простой — Java похож на C++, но в нем удалено большинство более сложных функций C и C++.

Java не предоставляет:

Динамическая память, управляемая программистом

Компоненты JRE

JRE — это программная среда, в которой могут работать программы, скомпилированные для типичной реализации JVM. Система выполнения включает:

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

Реализация JVM

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

Рисунок 1-1. Типичная реализация JVM: функциональная связь с JRE и библиотеками классов

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

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

Рис. 1-2. Традиционная среда компиляции
Рис. 1-3 Новая переносимая среда Java во время компиляции

Многопоточность JVM

Язык программирования Java требует поддержки многопоточных (MT) программ (см. Главу 2, Многопоточность). Все интерпретаторы Java предоставляют среду программирования MT. Однако многие из этих интерпретаторов поддерживают только однопроцессорную многопоточность, поэтому потоки программы Java выполняются по одному за раз.

Интерпретатор Solaris JVM использует все преимущества многопроцессорных систем, используя встроенные средства многопоточности Solaris. Они позволяют планировать несколько потоков одного процесса одновременно на несколько ЦП. Программа MT Java, работающая под управлением JVM Solaris, будет иметь существенное увеличение параллелизма по сравнению с той же программой, выполняемой на других платформах.

Компилятор Sun Just-In-Time (JIT)

JIT-компилятор Sun Java, неотъемлемая часть Solaris JVM, может во много раз повысить производительность выполнения по сравнению с предыдущими уровнями. Долгосрочные, ресурсоемкие программы демонстрируют лучший прирост производительности.

Процесс JIT-компиляции

Если переменная среды компилятора JIT включена (по умолчанию), JVM считывает файл .class для интерпретации и передает его компилятору JIT. Затем компилятор JIT компилирует байт-коды в собственный код для платформы, на которой он работает. На следующем рисунке показан процесс JIT-компиляции.

Рис. 1-4. Процесс JIT-компиляции

На следующем рисунке показана функциональная связь JIT с Solaris JVM и JRE.

Читайте также: