что такое jvm jdk jre
Различия между JDK, JRE и JVM
JAVA DEVELOPMENT KIT
Java Development Kit (JDK) — это среда разработки программного обеспечения, используемая для разработки приложений и апплетов Java. Он включает в себя среду выполнения Java (JRE), интерпретатор / загрузчик (Java), компилятор (javac), архиватор (jar), генератор документации (Javadoc) и другие инструменты, необходимые для разработки Java.
JAVA RUNTIME ENVIRONMENT
Разница между JDK, JRE и JVM
Чтобы понять разницу между этими тремя, давайте рассмотрим следующую диаграмму.
Примечание: JDK используется только разработчиками Java.
Как работает JRE и JDK?
Из чего состоит JRE?
JRE состоит из следующих компонентов:
Загрузчик классов загружает все необходимые классы, необходимые для выполнения программы. Он обеспечивает безопасность, отделяя пространства имен локальной файловой системы от импортированной через сеть. Эти файлы загружаются либо с жесткого диска, сети или из других источников.
JVM пропускает код с помощью Byte Code Verifier, который проверяет формат и проверяет наличие недопустимого кода. Например, незаконный код — это код, который нарушает права доступа к объектам или нарушает реализацию указателей.
Верификатор байт-кода гарантирует, что код соответствует спецификации JVM и не нарушает целостность системы.
Во время выполнения Байт-код загружается, проверяется и запускается интерпретатором. Переводчик имеет следующие две функции:
Обе операции могут быть показаны как:
Чтобы понять взаимодействие между JDK и JRE, рассмотрите следующую диаграмму.
Как работает JVM?
Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.
Вопросы по Java на собеседовании (5)
1. JRE, JVM и JDK |
2. Загрузчики классов, динамическая загрузка классов |
3. Области памяти Heap и Stack |
4. Сборщик мусора Garbage Collector |
5. Рефлексия кода, reflection |
6. Определение свойств класса в run-time |
7. Определение интерфейсов и конструкторов класса в режиме run-time |
8. Определение полей класса в режиме run-time |
9. Определение методов класса в режиме run-time |
10. Вызов метода класса в режиме run-time |
1. JRE, JVM и JDK
JRE (Java Runtime Environment) представляет минимальную реализацию виртуальной машины, необходимую для исполнения Java-приложений. JRE состоит из виртуальной машины JVM (Java Virtual Machine) и библиотек Java-классов, но не включает компилятор и средства разработки Java приложений.
2. Загрузчики классов, динамическая загрузка классов
Если в программе создаются пользовательские загрузчики, то они должны быть унаследованы от класса java.lang.ClassLoader.
Статическая и динамическая загрузка класса
Статическая загрузка класса происходит при использовании оператора «new». Динамическая загрузка происходит в режиме «run-time» с помощью статического метода класса Class.forName(className).
Подробное описание загрузчиков класса представлено здесь.
3. Области памяти Heap и Stack
4. Сборщик мусора Garbage Collector
Сборщик мусора имеет несколько алгоритмов очистки памяти. В первую очередь, он может быть вызван, когда объем свободной памяти в области Eden Space становится критичным. В этом случае, Garbage Collector просто переносит объекты, имеющие ссылки, из области Eden Space в область Survivor Space, а объекты без ссылок удаляет. Эта, так называемая minor’ная очистка, выполняется быстро.
Если при очистке мусора памяти в области Survivor Space недостаточно, то долгоживущие объекты переносятся в область Tenured Generation, где они могут хранится до конца работы приложения. Вся остальная куча очищается от мусора.
Следует отметить, что сборщик мусора периодически вызывается виртуальной машиной, а не только тогда, когда не хватает памяти.
Более подробное описание распределения памяти в виртуальной машине JVM и о Garbage Collector’e представлено здесь.
5. Рефлексия кода, reflection
Интерфейс Java Reflection API состоит из классов пакетов java.lang и java.lang.reflect.
6. Определение свойств класса в режиме run-time
В работающем приложении для получения класса используется метод forName (String className) :
Наименование класса, включающего пакет (package), извлекается методом getName() объекта Class :
Для получения значения модификатора класса используется метод getModifiers(). Класс java.lang.reflect.Modifier содержит статические методы, возвращающие логическое значения проверки модификатора класса :
Для получения суперкласса рефлексированного объекта (класса) необходимо использовать метод getSuperclass () :
Поскольку в Java отсутствет множественное наследование, то для получения всех предков следует рекурсивно вызвать метод getSuperclass () в цикле, пока не будет достигнут Object, являющийся родителем всех классов. Object не имеет родителей, поэтому вызов его метода getSuperclass () вернет null.
7. Определение интерфейсов и конструкторов класса в режиме run-time
Для получения в режиме run-time списка интерфейсов, реализующих классом, необходимо получить Class и использовать его метод getInterfaces(). Следующий пример демонстрирует получение списка интерфейсов класса ArrayList :
Чтобы IDE (Eclipse) не предупреждала о необходимости определения типа класса
Class is a raw type. References to generic type Class should be parameterized
в коде используются generic’и. В консоль будут выведены следующие интерфейсы, реализуемые классом ArrayList :
Метод класса getConstructors () позволяет получить массив открытых конструкторов типа java.lang.reflect.Constructor. После этого, можно извлекать информацию о типах параметров конструктора и генерируемых исключениях. Пример :
8. Определение полей класса в режиме run-time
Метод getFields() объекта Class возвращает массив открытых полей типа java.lang.reflect.Field. Эти поля могут быть определены не только в классе, но также и в его родителях (суперклассе), либо интерфейсах, реализованных классом или его родителями. Класс Field позволяет получить имя поля, тип и модификаторы.
Если известно наименование поля, то можно получить о нем информацию с помощью метода getField() объекта Class.
Методы getField() и getFields() возвращают только открытые члены данных класса. Чтобы получить все поля класса необходимо использовать методы getDeclaredField() и getDeclaredFields(). Данные методы работают точно также, как и их аналоги getField() и getFields(), за исключением того, что они возвращают все поля, включая закрытые и защищенные.
Определение значение полей класса
Класс Field содержит специализированные методы для получения значений примитивных типов: getInt(), getFloat(), getByte() и др. Для установки значения поля, используется метод set(). Для примитивных типов имеются методы setInt(), setFloat(), setByte() и др.
9. Определение методов класса в режиме run-time
Метод getMethods() объекта Class возвращает массив открытых методов типа java.lang.reflect.Method. Эти методы могут быть определены не только в классе, но также и в его родителях (суперклассе), либо интерфейсах, реализованных классом или его родителями. Класс Method позволяет получить имя метода, тип возвращаемого им значения, типы параметров метода, модификаторы и генерируемые исключения.
Если известно имя метода и типы его параметров, то можно получить отдельный метод класса :
10. Вызов метода класса в режиме run-time
Допустим, что имеется класс Reflect, включающий два закрытых поля id и name и несколько методов для определения значений этих полей. Нас будут интересовать только метод setData для определения значений и метод toString для печати значений.
Сначала получаем метод класса. Для этого формируем массив типов параметров метода и вызываем getMethod с наименованием метода класса и списком его параметров params. После этого формируем массив новых значение полей класса args и вызываем метод invoke объекта Method с указанием объекта класса и аргументами. В заключение получаем ссылку на метод toString и распечатываем значения.
Русские Блоги
Руководство по синтаксису Java Среда разработки Java JVM, JRE, JDK
1. JVM (виртуальная машина Java, виртуальная машина Java)
2. JRE (среда выполнения Java, среда выполнения Java)
● java.io: сюда входят все классы, связанные с вводом и выводом, например файловые операции.
● java.nio: новый пакет, написанный для улучшения функций в пакете io и повышения производительности пакета io (но не для замены пакета io).
● java.net: существуют классы, относящиеся к сети, такие как URL, сокет и т. Д.
● java.util: это класс системного инструмента, который включает в себя основные коллекции, такие как Коллекция, Список и Карта.
● java.sql: это класс для операций с базой данных, включая классы Connection, Statement и другие.
Если вам нужно запускать только программы Java, вам нужно только установить JRE на свой компьютер.
3. JDK (Java Development Kit, Java Development Kit)
● javac: компилятор, преобразующий исходный код Java в файлы байт-кода.
● java: запустить скомпилированный файл байт-кода (интерпретатор).
● javadoc: генератор документации, который извлекает документацию из комментариев к документации в исходном коде.
Наконец, подведем итог взаимосвязи между JVM, JRE и JDK. JDK содержит JRE, а JRE содержит JVM, как показано на рисунке:
Инженеры и друзья Java, проработавшие от одного до пяти лет, могут присоединиться к группе JavaQQ: 219571750, группа предоставляет бесплатные учебные материалы по архитектуре Java (включая высокую доступность, высокий уровень параллелизма, высокую производительность и распределенность, настройку производительности Jvm, исходный код Spring code, MyBatis, Netty, Redis, Kafka, Mysql, Zookeeper, Tomcat, Docker, Dubbo, Nginx и другие точки знаний) рационально использовать свои собственные каждую минуту и каждую секунду, чтобы учиться и совершенствоваться, не используйте «некогда», чтобы спрячь в уме свою лень! Постарайтесь, пока вы молоды, и дайте себе объяснение в будущем!
Интеллектуальная рекомендация
Улучшение алгоритма обучения Blue Bridge Cup Простое добавление (насильственный подсчет)
описание проблемы Четыре натуральных числа меньше 10 могут делить 3 или 5 (3, 5, 6, 9), а их сумма равна 23. Вычислите сумму всех натуральных чисел меньше 1000, которые могут делить 3 или 5. Затем исп.
Стратегия Стратегия Pattern
совместное использование обучения awk
Простые несколько строк кода написать Sigmoid Function Image
Python Написать сигмовидное изображение функции.
Архитектура JVM: обзор архитектуры JVM и JVM
Привет читатели! В этом руководстве мы поймем и изучим виртуальную машину Java (JVM) и ее архитектуру. Этот урок поможет вам правильно ответить на следующие вопросы:
1. Введение
Виртуальная машина Java (JVM) — это абстрактная виртуальная машина, которая находится на вашем компьютере и предоставляет среду выполнения для выполнения байт-кода Java. JVM доступна для многих аппаратных и программных платформ, но немногие Java-разработчики знают, что Java Runtime Environment (JRE) — это виртуальная машина Java (JVM). JVM анализирует байт-код, интерпретирует его и выполняет тот же байт-код для отображения выходных данных.
Рис. 1: Обзор виртуальной машины Java
1.1 Что делает JVM?
Виртуальная машина Java выполняет следующие операции:
Рис. 2: компоненты JVM
1.2 Типы виртуальных машин Java
Редакция Java имеет две разные реализации виртуальной машины Java (JVM), т.е.
1.3 Внутренняя архитектура JVM
На схеме показаны ключевые внутренние компоненты виртуальной машины Java, соответствующие спецификации JVM.
Рис. 3: Архитектура виртуальной машины Java
Компоненты, показанные на рис. 3, поясняются ниже.
1.3.1 Класс Loader
1.3.2 Области данных времени выполнения
Эта подсистема разделена на пять основных компонентов, т.е.
Эта область играет важную роль во время вызова метода и возврата.
1.3.3 Механизм исполнения
Этот компонент выполняет байт-код, который назначается областям данных времени выполнения и имеет три основных подкомпонента, а именно:
JVM vs. JRE vs. JDK: What’s the Difference?
30 June 2021 6 min read
IBM Cloud Education, IBM Cloud Education
How do JVM, JRE and JDK relate and work together in the Java development process?
Java is one of the most popular programming languages used in developing environments today. It is primarily used for back-end development projects, game development and desktop and mobile computing. Read on and find out how Java Virtual Machine (JVM), Java Runtime Environment (JRE) and Java Development Kit (JDK) each play a role in the Java development process, their relationship to each other and the differences that set them apart.
What is Java Virtual Machine (JVM)?
Java Virtual Machine, or JVM, loads, verifies and executes Java bytecode. It is known as the interpreter or the core of Java programming language because it executes Java programming.
The role of JVM in Java
JVM is specifically responsible for converting bytecode to machine-specific code and is necessary in both JDK and JRE. It is also platform-dependent and performs many functions, including memory management and security. In addition, JVM can run programs written in other programming languages that have been translated to Java bytecode.
Java Native Interface (JNI) is often referred to in connection with JVM. JNI is a programming framework that enables Java code running in JVM to communicate with (i.e., to call and be called by) applications associated with a piece of hardware and specific operating system platform. These applications are called native applications and can often be written in other languages. Native methods are used to move native code written in other languages into a Java application.
JVM components
JVM consists of three main components or subsystems:
What is Java Runtime Environment (JRE)?
Java Runtime Environment, or JRE, is a set of software tools responsible for execution of the Java program or application on your system.
JRE uses heap space for dynamic memory allocation for Java objects. JRE is also used in JDB (Java Debugging).
The role of JRE in Java
If a programmer would like to execute a Java program using the Java command, they should install JRE. If they are only installing (and not developing or compiling code), then only JRE is needed.
JRE components
Besides the Java Virtual Machine, JRE is composed of a variety of other supporting software tools and features to get the most out of your Java applications.
What is Java Development Kit (JDK)?
Java Development Kit, or JDK, is a software development kit often called a superset of JRE. It is the foundational component that enables Java application and Java applet development. It is platform-specific, so separate installers are needed for each operating system (e.g., Mac, Unix and Windows).
The role of JDK in Java
JDK contains all the tools required to compile, debug and run a program developed using the Java platform. (It’s worth noting that Java programs can also be run using command line.)
JDK components
JDK includes all the Java tools, executables and binaries needed to run Java programs. This includes JRE, a compiler, a debugger, an archiver and other tools that are used in Java development.
Java SE vs. Java EE
Java is synonymous with Java Standard Edition (Java SE) or Core Java. All three euphemisms refer to the basic Java specification that includes the act of defining types and objects. Java EE, on the other hand, provides APIs and is typically used to run larger applications. The content of this blog focuses on Java SE.
How JVM, JRE and JDK work together
Let’s first look at how the three core components of Java work together, and then we can examine the differences. The diagram below provides an image of how JVM, JRE and JDK fit together in the Java landscape.
If you envision a baseball sliced open, it contains three main components: the round cushioned core, the wool and cotton midsection and the cowhide exterior. A ball without all three of these layers will not perform its intended function. Much like the three basic parts of a baseball, JVM, JRE and JDK all have very specific functions. Without all three, Java will not operate successfully.
JDK vs. JRE vs. JVM: Key differences
And now, for the differences:
Complementary technologies
There are many complementary technologies that can be used to enhance JVM, JRE or JDK. The following technologies are among the most frequently used:
JVM and container technology
Java Virtual Machine (JVM) is used to create — you guessed it — virtual machines (VMs). VMs are servers that allow multiple applications to run on the same underlying physical hardware without impacting one another. This provides better use of resources and makes it much easier and cost-effective to scale than traditional infrastructure. VMs are also easily disposable because of their independence. When you no longer need the application, you simply take the VM down.
Containers take this abstraction to the next level and virtualize the OS kernel. The absence of the OS renders containers even more lightweight, fast and flexible than VMs.
Java, JVM, JDK, JDK and IBM
For many organizations, Java continues to be a vital part of application development and provides a solid foundation when creating portable and scalable solutions. It can also serve a key role in modernizing applications on the journey to cloud.
Take the next step by explore OpenJDK and IBM Runtimes for Business, which provides reliable and cost-effective commercial support for implementing, monitoring and managing Java applications.
Get started with an IBM Cloud account today.