Путь разработчика    

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


Содержание

Java Virtual Machine (JVM) - это спецификация, предоставляющая среду выполнения, в которой может быть запущен Java-байт-код. Как следует из названия, JVM действует как «виртуальный» механизм или процессор. Независимость платформы Java состоит в основном из ее виртуальной машины Java (JVM). JVM делает это возможным, поскольку он знает конкретные длины команд и другие особенности платформы. JVM выполняет следующую операцию:

  1. Загружает код
  2. Проверяет код
  3. Выполняет код

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

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

Архитектура JVM

Каждое приложение Java запускается внутри экземпляра среды выполнения конкретной реализации абстрактной спецификации виртуальной машины Java. Существует три понятия JVM: спецификация, реализация и экземпляр.

  1. Спецификация: документ, который описывает, что требуется для реализации JVM.
  2. Реализация: Известна как JRE (Java Run Time Environment.)
  3. Экземпляры: всякий раз, когда вы запускаете файл класса Java, создается экземпляр JVM.
  1. Подсистема загрузчика классов
  2. Область данных времени выполнения
  3. Механизм выполнения

Подсистема загрузчика классов

Подсистема загрузчика классов Java загружает, связывает и инициализирует файл класса, когда он впервые ссылается на класс во время выполнения. Он отвечает за загрузку файлов классов из файловой системы, сети или любого другого источника. В загрузчике классов Java, Bootstrap, Extension и System или Application используется три загрузчика класса по умолчанию.

Загрузочный загрузчик класса

Когда запускается JVM, запускается специальный кусок машинного кода, который загружает загрузчик системных классов. Этот машинный код известен как загрузочный загрузчик Bootstrap / Primordial. Это машинные инструкции, специфичные для платформы, которые запускают весь процесс загрузки классов. Загрузочный загрузчик bootstrap также выполняет загрузку всего кода, необходимого для поддержки базового Java Runtime Environment (JRE), включая классы в Java.util и Java.lang.

Extension ClassLoader

Загрузчик класса Extension загружает классы из каталогов расширений JRE, таких как каталоги lib / ext. Extension ClassLoader делегирует запрос на загрузку класса для своего родителя, Bootstrap и, если он неудачен, загружает каталог классов jre / lib / ext или любой другой каталог, указанный системным свойством Java.ext.dirs. Расширение ClassLoader в JVM реализуется sun.misc.Launcher $ ExtClassLoader.

Загрузчик класса System / Application

System / Application Class Loader отвечает за загрузку класса Application Class, путь, указанный в переменной среды и т. Д.

Classloader - Связывание

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

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

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

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

Виртуальная машина Java (JVM) определяет различные области данных во время выполнения, которые используются во время выполнения программы. Некоторые из этих областей данных создаются при запуске Java Virtual Machine и уничтожаются только при выходе из виртуальной машины Java. Другие области данных относятся к каждой теме. Области данных в потоке создаются, когда поток создается и уничтожается при выходе потока.

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

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

Область кучи

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

Область стека

Стек - это место памяти, где хранятся методы и локальные переменные. Переменные ссылки (примитивные или объектные ссылки) хранятся в папке

PC Register

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

Пакет Native Method

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

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

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

  1. Интерпретатор
  2. Компилятор JIT
  3. Сборщик мусора

Интерпретатор

Считывает, интерпретирует и выполняет инструкции байтового кода один за другим. Поскольку он интерпретирует и выполняет инструкции один за другим, он может быстро интерпретировать один байт-код, но медленно выполняет интерпретируемый результат. Это недостаток языка интерпретации. «Язык», называемый Bytecode, в основном работает как интерпретатор.

Компилятор JIT

Компилятор JIT преобразует байт-код в выражение промежуточного уровня IR (промежуточное представление) для выполнения оптимизации, а затем преобразует выражение в собственный код. Компилятор JIT был введен для компенсации недостатков интерпретатора. Основная цель JIT-компилятора - улучшить производительность. Внутренний JIT-компилятор поддерживает отдельный счетчик для каждого метода. Всякий раз, когда JVM через любой вызов метода, сначала этот метод будет интерпретироваться обычно интерпретатором, а компилятор JIT увеличивает соответствующую переменную счетчика.

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

Сбор мусора (GC) - это процесс, который направлен на освобождение занятой памяти, на которую больше не ссылается какой-либо доступный объект Java, и является неотъемлемой частью системы управления динамической памятью виртуальной машины Java (JVM). Все объекты Java автоматически захватывают память, которая им нужна, когда они созданы, а когда объект больше не нужен, процесс сборки Java Garbage Collection восстанавливает память. Это означает, что сборщик мусора отслеживал живые объекты и все остальное обозначенное мусором.

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

Библиотеки родных методов

Нативные библиотеки методов - это сборник собственных библиотек, который требуется для механизма выполнения.

Источник: http://net-informations.com/Java/intro/jvm.htm



Отзывы (через Facebook):

Оставить отзыв с помощью аккаунта FaceBook:

Нарисуйте водяной знак в C#

Пример Использование ColorMatrix для добавления водяного знака к изображению на C# показывает один способ добавления водяного знака к изображению. В этом п...

17 09 2019 3:53:40

Как работает метод hashCode () Java?

Java.lang.Object имеет методы, называемые hasCode(), и эти методы играют значительную роль в приложении реального времени. Объект hashCode() Object фактиче...

16 09 2019 8:36:11

Отображать индексы и надписи в RichTextBox в C#, версия 2

В следующих примерах показано, как отображать индексы и верхние индексы в RichTextBox. Это были довольно простые примеры, и Судир Шривастава обнаружил ситу...

15 09 2019 3:54:53

Отображение текста на ProgressBar в C#

Было бы неплохо, если бы вы могли отобразить сообщение о ходе работы над ProgressBar. К сожалению, вы не можете этого сделать. Вы даже не можете помещать я...

14 09 2019 9:36:20

Массивы в JavaScript

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

13 09 2019 21:24:16

Преобразовать байт-массив в шестнадцатеричную строку и наоборот в C#

В этой статье мы узнаем, как преобразовать байт-массив в шестнадцатеричную строку и наоборот в C#. Преобразование байт-массива в шестнадцатеричную строку в...

12 09 2019 1:47:28

Нарисуйте цветное колесо в C#

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

11 09 2019 15:34:23

Как преобразовать TimeStamp в Date в Java?

API JDBC использует отдельный класс Date, Time и Timestamp для подтверждения типа данных DATE, TIME и DATETIME из базы данных, но большая часть объектно-ор...

10 09 2019 19:39:39

Нарисуйте простую гистограмму в C#

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

09 09 2019 19:20:57

Разница между system.gc() и runtime.gc() в Java

Типичный алгоритм сбора мусора (GC) в Java идентифицирует мусор, перемещая все ненужные объекты в куче и предполагая, что любой объект, который не был посе...

08 09 2019 8:59:31

Строки в JavaScript

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

07 09 2019 15:58:18

Класс Java HashSet

Класс HashSet расширяет AbstractSet и реализует заданный интерфейс. Набор представляет собой набор, который не содержит повторяющихся элементов и элементы...

06 09 2019 17:34:16

Что такое Externalizable в Java?

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

05 09 2019 4:29:58

This в JavaScript

This ключевое слово является одним из самых запутанных и непонятных частей JavaScript. Ключевое слово this this ведет себя по-разному в JavaScript по сравн...

04 09 2019 17:33:18

Изучаем JavaScript (Моррисон М.)

Вы готовы сделать шаг вперед в своей практике веб-программирования и перейти от верстки в HTML и CSS к созданию полноценных динамических страниц? Тогда при...

03 09 2019 16:45:23

Создайте библиотеку кнопок XAML в C#

В этом примере показано, как можно создать библиотеку кнопок XAML с возможностью повторного использования в WPF. Пример Создание шаблона кнопки WPF в C# ис...

02 09 2019 16:21:55

Файлы в каталоге автозагрузки в C#

В некоторых программах вы можете найти файлы, которые были установлены с программой. Один из способов сделать это - поместить файлы в каталог установки про...

01 09 2019 3:43:20

Числовые выражения, введенные пользователем в C#

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

31 08 2019 5:49:14

Как установить максимальное использование памяти для JVM?

Объем памяти, которую может использовать программа Java, зависит от ее среды. Библиотека Java Standard предоставляет следующие методы в классе выполнения....

30 08 2019 16:21:52

Анимация проблемы Башни Ханоя в C#

Следующий метод AnimateMovement перемещает диск по прямой линии из текущего местоположения в новый. Код вычисляет количество пикселей в секунду, которое он...

29 08 2019 6:36:12

Как создать форматированный XML-документ в памяти в C#

В этом примере используется XmlTextWriter для создания форматированного XML-документа в памяти и отображения его в текстовом поле. Когда вы нажимаете кнопк...

28 08 2019 19:44:55

Вопросы по Python - 2

Когда используется словарь вместо списка? Вы бы использовали словарь, если вам нужно сопоставлять (или ассоциировать) значимые ключи с значениями, тогда ка...

27 08 2019 23:30:45

Разница между локальной переменной Java, переменной экземпляра и переменной класса?

Локальная переменная в Java обычно используется в методе, конструкторе или блоке и имеет только локальную область. Таким образом, вы можете использовать пе...

26 08 2019 1:36:27

HTML5 для веб-дизайнеров (Кит Джереми)

В HTML5 появилось много интересных тэгов, в том числе поддержка аудио и видео-файлов. Теперь вам не надо тратить время на установку плагинов для проигрыван...

25 08 2019 22:26:55

Создание и передвижение 2D персонажа в Unity по клику мыши

В этом уроке мы разобрали как создать 2D персонажа в Unity и реализовали плавное передвижение по клику мыши c возможностью отключения столкновений....

24 08 2019 22:15:42

JavaScript. Справочник (Аллен Вайк)

Книга "Javascript. Справочник" представляет собой исключительно полный справочник по объектам, методам, атрибутам, высокоуровневым функциям языка написания...

23 08 2019 5:39:24

Как распечатать ListView с большим содержимым в C#

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

22 08 2019 5:45:49

Методы расширения для генерации случайных чисел двойной дочности в C#

В этом примере добавляются методы расширения класса Random для генерации двойных значений в указанном диапазоне. Класс Random предоставляет методы для гене...

21 08 2019 2:24:48

Сделать меню во время выполнения для приложения WPF в C#

В этом примере показано, как вы можете создавать меню во время выполнения и добавлять их в приложение WPF. Обычно вы создаете пользовательский интерфейс пр...

20 08 2019 19:52:36

Получить рабочую область экрана в C#

Рабочая область является частью экрана, который обычно может занимать приложение. Эта область может находиться в разных частях экрана в зависимости от разм...

19 08 2019 16:59:32

Являются ли полиморфизм, перегрузка и переопределение аналогичных понятий?

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

18 08 2019 6:25:17

Путь установки для Python

Windows позволяет постоянно настраивать переменные среды как на уровне пользователя, так и на уровне системы или временно в командной строке.  Чтобы запусти...

17 08 2019 18:17:58

Используйте всплывающие подсказки в C#

Чтобы создать всплывающие подсказки во время разработки, добавьте компонент ToolTip в форму. Он добавляет новое свойство для каждого из других элементов уп...

16 08 2019 17:17:46

Преобразовать строку в число в Java? String to Int

Преобразование String в int или Integer - очень распространенная операция в Java. Существует несколько простых способов сделать это преобразование. Часто и...

15 08 2019 19:23:38

Разница между статическими и нестатистическими методами Java

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

14 08 2019 8:31:18

Что такое классы-оболочки в Java

Как сказано в названии, класс-оболочка обертывает (охватывает) вокруг типа данных и дает ему вид объекта. Они используются для преобразования любого примит...

13 08 2019 7:25:32

Перезапустите диспетчер очереди печати в C#

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

12 08 2019 18:10:17

Сериализация и десериализация объектов в C#

Сериализация - это процесс преобразования объекта в последовательный поток-подобный формат. Часто это означает преобразование его в XML-данные для хранения...

11 08 2019 8:25:36

Delphi 6. Учебный курс (В. В. Фаронов)

В книге "Delphi 6. Учебный курс" даются начальные сведения по системе программирования Delphi, разработанной американской корпорацией Borland International...

10 08 2019 18:15:33

Обеспечить автосохранение в C#

Этот пример расширяет пример scribble (наиболее недавно описанный в post Предоставить отменить и повторить в C# ), поэтому он предоставляет функцию автомат...

09 08 2019 13:33:27

Почему класс Java не может быть объявлен как статический?

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

08 08 2019 22:50:28

Класс Java Scanner

Класс Java Scanner - это класс в пакете Java.util, который позволяет пользователю считывать значения различных типов. Это простой текстовый сканер, который...

07 08 2019 7:16:34

Эффект радуги изображения в C#

Этот пример расширяет сообщение Использовать объект ImageAttributes для применения общих цветовых тонов к изображению на C# для радуги изображения. Он отби...

06 08 2019 16:27:28

Определите, является ли год високосным в C#

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

05 08 2019 2:46:30

Сжатие файлов JPG до определенного размера в C#

Пример Оптимизация уровня сжатия JPEG и файла размер в C# показывает, как сохранить JPG-файл с различными уровнями сжатия. Использование меньшего уровня де...

04 08 2019 8:39:55

Является ли JavaScript функциональным языком программирования?

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

03 08 2019 16:57:50

Добавление метода расширения в класс Graphics в C#

По какой-то странной причине метод DrawRectangle класса Graphics не может принимать параметр RectangleF в качестве параметра. Он может принимать значения R...

02 08 2019 23:52:38

Инициализация ComboBox из перечисления в C#

Часто полезно инициализировать ComboBox из перечисления, чтобы пользователь мог выбрать одно из значений перечисления. Вы можете ввести значение в ComboBox...

01 08 2019 8:18:57

Ключевые слова в Python

Ключевые слова - зарезервированные слова в Python. Это зарезервированные слова, и мы не можем использовать ключевое слово в качестве имени переменной, имен...

31 07 2019 13:20:50

Отображать изображения в базе данных Access в WPF и C#

В этом примере показано, как вы можете отображать изображения, хранящиеся в базе данных Access в программе WPF. Вы можете сделать это с помощью связанных э...

30 07 2019 17:59:33

Язык программирования С++ (Б. Страуструп)

Книга Б. Страуструпа " Язык программирования С++" дает описание языка, его ключевых понятий и основных приемов программирования на нем. Это завершенное руко...

29 07 2019 10:17:34


Parse error: syntax error, unexpected ',' in /home/users/9/9161484547/domains/flash-mx.ru/lessons/926.php on line 69