Виртуальная машина структура программ jre jdk

В этой статье мы обсудим различия между 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, а некоторые создаются при создании потока и уничтожаются при выходе из потока.

Understand the Differences between JVM vs JRE vs JDK in java in one video #1.3

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

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

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

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

Площадь кучи

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

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

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

  • Eden Space — это часть пространства Young Generation. Когда мы создаем объект, JVM выделяет память из этого пространства
  • Survivor Space — это тоже часть пространства Young Generation. Пространство выживших содержит существующие объекты, которые пережили минорные фазы ГХ ГХ
  • Арендное пространство — это также известно как пространство Старого поколения. Это держит долго выживающие объекты. По сути, для объектов молодого поколения устанавливается порог, и при достижении этого порога эти объекты перемещаются в постоянное пространство.

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

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

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

Читайте также:
Программа реструктуризации предприятия это

#23 JDK JRE JVM in Java

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

  • 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
  • Файлы свойств
Читайте также:
Как установить программу для сканирования canon

Программирование Тема 2.1 Введение в Java

Java – это язык программирования и платформа ( 1995, Sun Microsystems, Джеймс Гослинг) Платфома Java : Виртуальная машина Java (JVM); Стандартная библиотека классов. Варианты распространения платформы Java: JRE ( Java Runtime Environment ); JDK (Java Development Kit). Версии JDK: Java SE (Java Standard Edition); Java EE (Java Enterprise Edition); Java ME (Java Micro Edition).

Платформа Java

Платформа – это совокупность аппаратного и программного (ОС) обеспечения (MS Windows, Linux, Solaris OS, Mac OS). Платфома Java – это программное обеспечение, которое состоит из двух основных частей: Виртуальная машина Java (JVM); Стандартная библиотека классов.

Платформа Java распространяется в двух вариантах – JRE (Java Runtime Environment ) и JDK(Java Development Kit) . JRE ( среда исполнения Java ) — это программное обеспечение, необходимая для исполнения Java- приложений, без компилятора и других средств разработки. Если пользователь хочет только запускать программы, это именно то, что ему нужно. JRE состоит из JVM, стандартных классов Java и вспомогательных файлов.

JDK — средство разработчика , состоящее из JRE, утилит командной строки (например, javac, java, javadoc и др.), исходных кодов классов стандартной библиотеки и вспомогательных файлов. JDK является базовым средством разработки приложений. Оно не содержит никаких текстовых редакторов, а оперирует только с уже существующими java-файлами с помощью утилит командной строки. Версии JDK: Java SE – комплект Java Standard Edition – для написания программного обеспечения для обычных компьютеров; Java EE– комплект Java Enterprise Edition – для написания серверного программного обеспечения; Java ME – комплект Java Micro Edition – для написания программного обеспечения для устройств, обладающих малыми ресурсами, например, сотовых телефонов, микроконтроллеров; 3

Платформа Java

• Ссылка для скачивания JRE: http://java.com/ru/download/index.jsp Ссылка для скачивания JDK: http://www.oracle.com/technetwork/java/javase/downloads/ 4

Платформа Java

Структура Java Development Kit (JDK)

Java Development Kit (JDK)

Проверка версии установленной Java – платформы: Проверка доступности javac: Если команда javac недоступна, то нужно добавить путь “ C:Program FilesJavajdk1.8.0_05bin” к системной переменной PATH (Пуск->Панель управления->Система->Дополнительно -> Переменные среды) 7

Структура, компиляция и выполнение Java-программы

Исходны й код (наборы классов) Pr1.java , Pr2.java , … , Prn.java

Динамическая
Компиля компоновка,
выполнение
ция
виртуальн
Компиля байт
тор ая
javac.exe -код машина
Java (JVM)
java.exe
Pr1.class
,
Pr2.class
, … ,
Prn.class

Структура, компиляция и выполнение Java-программы

Исходный код Java-программы – это текстовый файл , содержащий в себе одно или несколько описаний классов. Среди классов должен быть класс, содержащий метод main(). Именно с метода main() начинается выполнение программы. Текстовый файл с исходным кодом Java-программы должен иметь имя, совпадающее с именем класса, содержащим метод main() и расширение java.

Хорошим стилем программирования является описание одного класса в одном java-файле, имя которого совпадает с именем этого класса. Исходные java-файлы компилируются с помощью компилятора javac.exe в файлы с расширением .class.

Однако эти файлы не содержат машинный код, исполняемый непосредственно процессором, они содержат так называемый байт-код – код, обрабатываемый виртуальной машиной Java (JVM). Запуск программы в рамках JVM осуществляется с помощью утилиты java.exe. Поскольку существует реализация JVM для многих операционных систем, один и тот же файл .class может быть запущен на разных ОС.

Этим достигается переносимость или кросс- платформенность Java-программ. Виртуальная машина Java (JVM) – часть среды исполнения Java (JRE), выполняющая интерпретацию байт кода в машинный код конкретного процессора. Виртуальная Java-машина не только исполняет байт-код (интерпретирует его, занимается JIT- компиляцией и исполняет JIT-компилированный код), но и выполняет ряд других функций. Например, взаимодействует с операционной системой, обеспечивая доступ к файлам или поддержку графики. А также обеспечивает автоматическое высвобождение памяти, занятой ненужными объектами – так называемую сборку мусора (garbage collection). Все методы стандартных классов, вызываемые в программе, подключаются к ней только на этапе выполнения, а не включаются в байт-коды, то есть происходит динамическая компоновка .

Читайте также:
Как создать bat файл для запуска программы

Стандартная библиотека классов Java

Наиболее часто используемые пакеты библиотеки классов: java.lang — базовые классы, необходимые для работы любого приложения (название — сокращение от language); java.util — многие полезные вспомогательные классы; java.awt, java.swing — библиотека для создания графического интерфейса пользователя(GUI); java.io — работа с потоками данных (streams) и с файлами. Импортирование классов пакетов в программу: import java.lang.*; import java.util.Date; 10

Источник: studfile.net

Архитектура JVM: Механизм выполнения в JVM

Привет читатели! В предыдущей статье серии JVM разработчики узнали о компонентах ClassLoader и Runtime Data Areas виртуальной машины. Это руководство поможет разработчикам правильно понять механизм выполнения в JVM.

1. Введение

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

1.1 Что такое виртуальная машина Java (JVM)?

Виртуальная машина Java (JVM) — это абстрактная виртуальная машина, которая находится на вашем компьютере и обеспечивает среду выполнения для выполнения байт-кода Java. JVM доступна для многих аппаратных и программных платформ, но немногие разработчики Java знают, что Java Runtime Environment (JRE) является реализацией виртуальной машины Java (JVM). JVM анализирует байт-код, интерпретирует его и выполняет тот же байт-код для отображения выходных данных.

Основная функция JVM — выполнять скомпилированные .class (т.е. байт-код) и генерировать вывод. Обратите внимание , что каждая операционная система имеет свою JVM, но сгенерированный вывод байт-кода одинаков во всех операционных системах. Это означает, что байт-код, сгенерированный в ОС Windows, также может работать в ОС Linux и наоборот, что делает Java независимым от платформы языком.

Рис. 1: Обзор виртуальной машины Java

Рис. 1: Обзор виртуальной машины Java

1.1.1 Что делает JVM?

Виртуальная машина Java выполняет следующие операции:

  • Загрузка требуемых файлов .class и jar
  • Присвоение ссылок и проверка кода
  • Исполнение кода
  • Предоставляет среду выполнения для байт-кода Java

1.1.2 Внутренняя архитектура JVM

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

Рис. 2: Архитектура виртуальной машины Java

Рис. 2: Архитектура виртуальной машины Java

Компонент механизма выполнения, показанный на фиг.2, поясняется ниже.

1.2 Исполнение движка в JVM

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

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

Помните , что скомпилированный класс (то есть файл .class ), загружаемый интерпретатором виртуальной машины, должен содержать метод main() который принимает форму ниже.

Источник: coderlessons.com

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru