1.3 Виртуальная машина Java

1.3 Виртуальная машина Java

JVM (Виртуальная Машина Java) - основа языка программирования Java. Среда Java состоит из пяти элементов:
■ Язык Java
■ Определение байт-кода
■ Библиотеки класса Java/Sun
■ Виртуальная машина Java
■ Структура файла .class

Из всех этих пяти элементов, элементы, которые привели к успеху Java
■ Определение байт-кода,
■ структура файла .class,
■ и Виртуальная машина Java.

Таким образом "write once and run anywhere", было фактически осуществлено благодаря мобильности файла .class, который помогает выполнению на любом компьютере или наборе микросхем с использованием Виртуальной Машины Java.

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

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

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

Из-за несогласованности аппаратных платформ виртуальная машина использует понятие стека, который содержит следующую информацию:
■ Описатели состояния метода
■ Операнды к байт-кодам
■ Параметры методов
■ Локальные переменные

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

Другое понятие, которое становится популярным - это использование Just In Time (JIT) компилятора. Браузеры подобно Netscape Navigator 4.0 и Internet Explorer 4.0 включают JIT компиляторы, которые увеличивают скорость выполнения кодов Java. Основная цель JIТ состоит в том, чтобы преобразовать систему команд байт-кода к машинным командам кода, целенаправленным для специфического микропроцессора. Эти команды сохраняются и используются всякий раз, когда запрос делается к этому специфическому методу.

1.3.2 Среда выполнения Java

JRE (Java Runtime Environment, среда выполнения Java) JVM взаимодействующего с аппаратными средствами на одной стороне и программе на другом. JRE выполняет код, откомпилированный для JVM:
Загрузка .class файлов
Выполняется с помощью 'Загрузчика классов'
Загрузчик класса делает проверку защиты, если файлы используются в сети.
Проверка байт-кода
Выполняется 'верификатором байт-кода'
Верификатор байт-кода проверяет формат кода, преобразования типов объектов и проверяет нарушение прав доступа.
Выполнение кода
Выполняется 'интерпретатором во время выполнения'
Интерпретатор выполняет байт-коды и делает запросы на используемое оборудование.


Рисунок 1.3: Среда выполнения Java

1.3.3 Обработка исключений и управление памятью

В С, C++ или Паскале, программисты использовали примитивные методы распределения и освобождения блоков памяти - динамическую память. Динамическая память -большой кусок памяти, который обозначен в объёме всей памяти.

Динамическая память используется:
Свободный блочный список
Распределённый блочный список

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

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

Виртуальная Машина Java использует две отдельные динамических памяти для статического и динамического распределения памяти.

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

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

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

Коллектор исключений вызывает завершающийся метод прежде, чем с помощью обработки исключений собирается образец объекта. Завершающийся метод используется чтобы очистить внешние ресурсы подобно файлам и потокам, которые являются открытыми и о которых не позаботились в стандартной обработке исключений. Даже если мы явно вызываем обработку исключений методом (System.gc ()), это не будет работать быстро. Это просто намечено для того, чтобы работать. Также это означает, что обработка исключений не может быть вызвана. Это объясняется тем, что потоки обработки исключений выполняются в очень низком приоритете и могут часто прерываться. Это может случиться, когда наш объект никогда не располагался ранее в памяти.

назад к оглавлению вперед

Rus. Open Source company, г. Саратов
ул. Орджоникидзе, 156, офис 203
тел: 8 (8452) 57-84-41
e-mail: info@rus_opensource.com

Главная | Обзоры | О разном
Карта сайта

Учебная литература:

Введение в Linux
Основы JAVA
Архивы

© 2013 opensourcerules.net