Разница между JVM, JRE и JDK

Разница между JVM, JRE и JDK

1. обзор

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

2. JVM

Виртуальная машина Java (JVM) - это реализация виртуальной машины, которая выполняет программу Java.

Сначала JVM интерпретирует байт-код. Затем он сохраняет информацию о классе в области памяти. Наконец, он выполняет байт-код, сгенерированный компилятором java.

Это абстрактная вычислительная машина с собственным набором команд, которая манипулирует различными областями памяти во время выполнения.

Компоненты JVM являются:

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

  • Области данных времени выполнения

  • Двигатель исполнения

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

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

У нас есть подробная статья, посвященнаяclass loaders.

2.2. Области данных времени выполнения

The JVM defines various memory areas to execute a Java program. Они используются во время выполнения и известны как области данных времени выполнения. Некоторые из этих областей создаются при запуске JVM и уничтожаются при выходе из JVM, а некоторые создаются при создании потока и уничтожаются при выходе из потока.

Давайте рассмотрим эти области по порядку:

Область метода

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

Область метода, также известная как пространство постоянной генерации (PermGen), создается при запуске JVM. Память для этой области не должна быть смежной. Все потоки JVM разделяют эту область памяти.

Площадь кучи

JVM выделяет память для всех экземпляров классов и массивов из этой области.

Сборщик мусора (GC) восстанавливает память кучи для объектов. По сути, GC имеет три фазы для восстановления памяти от объектов, а именно. два второстепенных GC и один крупный GC.

Память кучи состоит из трех частей:

  • Eden Space - это часть пространства Young Generation. Когда мы создаем объект, JVM выделяет память из этого пространства

  • Survivor Space - это тоже часть пространства Young Generation. Пространство выживших содержит существующие объекты, которые пережили минорные фазы ГХ ГХ

  • Арендное пространство - это также известно как пространство Старого поколения. Это держит долго выживающие объекты. По сути, для объектов молодого поколения устанавливается порог, и при достижении этого порога эти объекты перемещаются в постоянное пространство.

JVM создает область кучи, как только она запускается. Все потоки JVM разделяют эту область. Память для области кучи не должна быть смежной.

Площадь стека

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

Каждая запись в стеке называется стековым фреймом или записью активации. Каждый кадр состоит из трех частей:

  • Local Variable Array - содержит все локальные переменные и параметры метода

  • Стек операндов - используется как рабочая область для хранения промежуточных результатов вычислений.

  • Данные кадра - используются для хранения частичных результатов, возвращаемых значений для методов и ссылки на таблицуException, которая предоставляет соответствующую информацию о блоке перехвата в случае исключений.

Память для стека JVM не обязательно должна быть смежной.

Регистры ПК

Каждый поток JVM имеет отдельный регистр ПК, в котором хранится адрес выполняемой в данный момент инструкции. Если текущая выполняемая инструкция является частью собственного метода, тогда это значение не определено.

Родной метод стеков

Родные методы - это методы, написанные на языках, отличных от Java.

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

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

2.3. Двигатель исполнения

Механизм выполнения выполняет инструкции, используя информацию, присутствующую в областях памяти. Он состоит из трех частей:

переводчик

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

Однако JVM использует JIT-компилятор для устранения этого недостатка.

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

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

JVM автоматически отслеживает, какие методы выполняются. Как только метод становится пригодным для JIT-компиляции, он планируется для компиляции в машинный код. Этот метод тогда известен как горячий метод. Эта компиляция в машинный код происходит в отдельном потоке JVM.

В результате он не прерывает выполнение текущей программы. После компиляции в машинный код он работает быстрее.

Уборщик мусора

Java заботится об управлении памятью с помощью Garbage Collection. Это процесс изучения памяти кучи, определения, какие объекты используются, а какие нет, и, наконец, удаления неиспользуемых объектов.

GC - это поток демонов. Его можно вызвать явно с помощью методаSystem.gc _ () _, однако он не будет выполнен немедленно, и JVM решит, когда вызывать сборщик мусора.

2.4. Собственный интерфейс Java

Он действует как интерфейс между кодом Java и нативными (C / C ++) библиотеками.

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

В этих случаях мы можем использовать JNI, чтобы код, запущенный в JVM, вызывал. И наоборот, он позволяет нативным методам вызывать код, выполняемый в JVM.

2.5. Родные библиотеки

Это специфичные для платформы библиотеки и содержат реализацию собственных методов.

3. JRE

Среда выполнения Java (JRE) - это набор программных компонентов, используемых для запуска приложений Java.

Основные компоненты JRE включают в себя:

  • Реализация виртуальной машины Java (JVM)

  • Классы, необходимые для запуска программ на Java

  • Файлы свойств

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

3.1. Bootstrap классы

Мы найдем классы начальной загрузки вjre/lib/. This path is also known as the bootstrap classpath. Включает:

  • Классы времени выполнения вrt.jar

  • Классы интернационализации вi18n.jar

  • Классы преобразования символов вcharsets.jar

  • другие

Bootstrap ClassLoader загружает эти классы при запуске JVM.

3.2. Классы расширения

Мы можем найти классы расширений вjre/lib/extn/, который действует как каталог для расширений платформы Java. This path is also known as extension classpath.

Он содержит библиотеки времени выполнения JavaFX вjfxrt.jar и данные локали для пакетовjava.text иjava.util вlocaledata.jar. Пользователи также могут добавлять пользовательские банки в этот каталог.

3.3. Настройки собственности

Платформа Java использует эти параметры свойств для поддержки своей конфигурации. В зависимости от их использования они расположены в разных папках внутри/jre/lib/. Они включают:

  • Конфигурации календаря вcalendar.properties

  • Конфигурации регистрации вlogging.properties

  • Конфигурации сети вnet.properties

  • Свойства развертывания в/jre/lib/deploy/

  • Управленческие свойства в/jre/lib/management/

3.4. Другие файлы

Помимо вышеупомянутых файлов и классов, JRE также содержит файлы для других целей:

  • Управление безопасностью вjre/lib/security

  • Каталог для размещения классов поддержки для апплетов вjre/lib/applet

  • Файлы, связанные со шрифтами вjre/lib/fonts и др.

4. JDK

Java Development Kit (JDK) предоставляет среду и инструменты для разработки, компиляции, отладки и выполнения программы Java.

Основные компоненты JDK включают в себя:

  • JRE

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

Мы обсудили JRE в приведенном выше разделе.

Теперь мы сосредоточимся на различных инструментах разработки. Давайте разделим эти инструменты на категории в зависимости от их использования:

4.1. Основные инструменты

Эти инструменты закладывают основу JDK и используются для создания и создания приложений Java. Among these tools, we can find utilities for compiling, debugging, archiving, generating Javadocs, etc.с

Они включают:

  • javac – читает определения классов и интерфейсов и компилирует их в файлы классов

  • java – запускает приложение Java

  • javadoc – генерирует HTML-страницы документации API из исходных файлов Java.

  • apt – находит и запускает обработчики аннотаций на основе аннотаций, присутствующих в наборе указанных исходных файлов

  • appletviewer - позволяет запускать Java-апплеты без веб-браузера.

  • jar – упаковывает апплеты или приложения Java в единый архив

  • jdb – инструмент командной строки для отладки, используемый для поиска и исправления ошибок в приложениях Java.

  • javah – создает заголовочные и исходные файлы C из класса Java.

  • javap – дизассемблирует файлы классов и отображает информацию о полях, конструкторах и методах, присутствующих в файле класса

  • extcheck – обнаруживает конфликты версий между целевым файлом архива Java (JAR) и установленными в данный момент файлами JAR расширений

4.2. Инструменты безопасности

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

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

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

  • keytool – помогает в управлении записями хранилища ключей, а именно криптографическими ключами и сертификатами.

  • jarsigner – создает файлы JAR с цифровой подписью, используя информацию о хранилище ключей.

  • policytool –  позволяет нам управлять файлами конфигурации внешней политики, которые определяют политику безопасности установки.

Некоторые инструменты безопасности также помогают управлять билетами Kerberos.

Kerberos - это протокол сетевой аутентификации.

Он работает на основе билетов, позволяющих узлам, осуществляющим связь по незащищенной сети, безопасно подтверждать свою идентичность друг другу:

  • kinit – используется для получения и кэширования билетов на выдачу билетов Kerberos

  • ktab – управляет основными именами и парами ключей в таблице ключей

  • klist – отображает записи в локальном кэше учетных данных и таблице ключей

4.3. Инструмент интернационализации

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

Для этой цели JDK предоставляетnative2ascii. Этот инструмент преобразует файл с символами, поддерживаемыми JRE, в файлы, закодированные в escape-последовательности ASCII или Unicode.

4.4. Инструменты удаленного вызова методов (RMI)

Инструменты RMI позволяют осуществлять удаленную связь между приложениями Java, тем самым предоставляя возможности для разработки распределенных приложений.

RMI позволяет объекту, запущенному в одной JVM, вызывать методы объекта, запущенного в другой JVM. Эти инструменты включают в себя:

  • rmic – генерирует классы-заглушки, скелеты и связки для удаленных объектов с помощью протокола удаленного метода Java (JRMP) или межсферного протокола Интернета (IIOP)

  • rmiregistry – создает и запускает реестр удаленных объектов

  • rmid – sзапускает системный демон активации. Это позволяет объектам быть зарегистрированными и активированными на виртуальной машине Java

  • serialver – возвращает UID серийной версии для указанных классов

4.5. Инструменты Java IDL и RMI-IIOP

Язык определения интерфейса Java (IDL) добавляет в платформу Java возможность общей объектно-ориентированной архитектуры брокера запросов (CORBA).

Эти инструменты позволяют распределенным веб-приложениям Java запускать операции в удаленных сетевых службах с использованием отраслевой стандартной группы управления объектами (OMG) - IDL.

Точно так же мы могли бы использовать интернет-протокол InterORB (IIOP).

RMI-IIOP, т.е. RMI поверх IIOP позволяет программировать серверы и приложения CORBA через API RMI. Таким образом, обеспечивается соединение между двумя приложениями, написанными на любом CORBA-совместимом языке, через Internet InterORB Protocol (IIOP).

Эти инструменты включают в себя:

  • tnameserv – временная служба именования, которая предоставляет древовидный каталог для ссылок на объекты

  • idlj – компилятор IDL-to-Java для генерации привязок Java для указанного файла IDL

  • orbd – enable клиенты для прозрачного поиска и вызова постоянных объектов на сервере в среде CORBA

  • servertool – предоставляет интерфейс командной строки для регистрации или отмены регистрации постоянного сервера с помощью ORB Daemon (orbd), запуска и выключения постоянного сервера, зарегистрированного с помощью ORB Daemon, и т. д.

4.6. Инструменты развертывания Java

These tools help in deploying Java applications and applets on the web. К ним относятся:

  • pack200 – преобразует файл JAR в файлpack200 с помощью компрессора Javagzip

  • unpack200 – преобразует файлpack200 в файл JAR

4.7. Java Plug-in Tool

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

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

С другой стороны,htmlconverter - это утилита для преобразования HTML-страницы, содержащей апплеты, в формат для Java Plug-in.

4.8. Java Web Start Tool

JDK приноситjavaws. , мы можем использовать его вместе с Java Web Start.

This tool allows us to download and launch Java applications with a single click from the browser. Следовательно, нет необходимости запускать какой-либо процесс установки.

4.9. Инструменты мониторинга и управления

These are great tools that we can use to monitor JVM performance and resource consumption. Вот некоторые из них:

  • jconsole – предоставляет графическую консоль, которая позволяет отслеживать и управлять приложениями Java.

  • jps – перечисляет оснащенные JVM в целевой системе

  • jstat – отслеживает статистику JVM

  • jstatd – отслеживает создание и завершение работы оснащенных JVM

4.10. Инструменты для устранения неполадок

These are experimental tools that we can leverage for troubleshooting tasks:

  • info – генерирует информацию о конфигурации для указанного процесса Java

  • jmap – печатает карты памяти общих объектов или детали памяти кучи указанного процесса

  • jsadebugd – подключается к процессу Java и действует как сервер отладки

  • jstack – печатает трассировку стека Java потоков Java для данного процесса Java

5. Заключение

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

Сначала мы описали, как JVM является абстрактной вычислительной машиной, которая фактически выполняет байт-код Java.

Затем мы объяснили, как просто запускать Java-приложения, мы используем JRE.

И, наконец, мы поняли, как разрабатывать приложения Java, мы используем JDK.

Мы также потратили некоторое время на изучение инструментов и фундаментальных концепций этих компонентов.