Виртуальная машина Java Андрей Дмитриев 2008
2 За счет чего Java программы переносимы? Дополнительный уровень, определяющий интерфейс к аппаратным ресурсам
3 Программа Что такое виртуальная машина? Устройство и состав
4 Java Virtual Machine JVM - основная часть исполняющей системы Java, называемой Java Runtime Environment
5 Основы Устройство JVM специфицировано в 1996 году JVM интерпретирует и исполняет байт-код Java Байт-код может исполняться на любой JVM подходящей версии Для каждой аппаратной платформы используется своя JVM
6 Состав JVM java – интерпретатор байт-кода Куча (heap) – нераспределенная область динамической памяти предназначенная для размещения объектов Сборщик мусора (Garbage Collector, GC) – постоянно действующий код, освобождающий неиспользуемые куски памяти Стек – структура данных, используемая для передачи параметров при вызове подпрограмм
7 Поддерживаемые типы данных byte 1-байтовое со знаком, представленное в дополнительном обратном коде short 2-байтовое со знаком, представленное в дополнительном обратном коде int 4-байтовое со знаком, представленное в дополнительном обратном коде long 8-байтовое со знаком, представленное в дополнительном обратном коде float вещественное число одинарной точности стандарта IEEE 754, занимающее 4 байта double вещественное число двойной точности стандарта IEEE 754, занимающее 8 байт charсимвол Unicode, занимающий 2 байта objectссылка на объект, занимающая 4 байта returnAddress4 байта, используемые с инструкциями jsr/ret/jsr_w/ret_w Реализация логического типа неспецифицирована
8 Управление памятью - сборка мусора Часто противопоставляется ручному управлению памятью Упрощает процесс программирования Предотвращает утечки памяти > Но утечки могут происходить при невнимательном программировании Позволяет оптимизировать размещение объектов Система с реализованной сборкой мусора как правило менее производительна и более требовательна к ресурсам
9 Сборщик мусора JVM Определяет объекты, которые в будущем не будут использоваться Освобождает память, занятую такими объектами Все время находится в рабочем состоянии Не предполагается никакого конкретного алгоритма работы Влиять на работу сборщика мусора можно лишь косвенно: > Рекомендуя выполнять те или иные действия > Изменяя параметры запуска
10 Виды сборки мусора Отслеживающий метод – обход графа и определение достижимости объекта Использование поколений: > При срабатывании сборщика мусора к значению неудаленного объекта прибавляется единица – сколько сборок мусора он пережил > Объекты с одинаковыми такими значениями образуют поколение > Сборщик мусора с большей вероятностью удаляет экземпляры только некоторых поколений
11 Ограничения На один класс в константном пуле отводится максимум элементов Длина кода метода ограничена байтами Число слов аргументов в вызове метода ограничено 255
12 Структура класс-файла ClassFile { u4 magic; u2 minor_version; u2 major_version; u2 constant_pool_count; cp_info constant_pool[constant_pool_count - 1]; u2 access_flags; u2 this_class; u2 super_class; u2 interfaces_count; u2 interfaces[interfaces_count]; u2 fields_count; field_info fields[fields_count]; u2 methods_count; method_info methods[methods_count]; u2 attributes_count; attribute_info attributes[attribute_count]; }
13 Исполнение программы Java При запуске приложения (класса) виртуальная машина выполняет следующие действия: Загрузка класса по его идентификатору загрузчиком классов (ClassLoader) Верификация - проверка того, что структура класса верна (инструкции имеют корректные коды, методы имеют сигнатуры) Подготовка - присваивание значений по умолчанию статическим полям класса Разрешение - все ссылки проверяются (заменяются на прямые ссылки) Инициализация - выполнение статического инициализирующего блока и присваивание значений статическим полям
14 Выгрузка класса Класс может быть выгружен, если его загрузчик стал недоступен Системные классы не могут быть выгружены ввиду того, что загрузчик системных классов доступен всегда во время работы JVM
15 Прерывание работы JVM JVM прекращает свою работу, если выполнено одно из условий: Все потоки, не являющиеся демонами, завершены Один из потоков вызвал метод exit() и данная операция была разрешена менеджером безопасности
16 Правда ли что… Формат класс-файла четко формализован? Размер кучи можно изменять во время работы JVM? При недостатке длины стека он автоматически увеличивается до необходимого размера? Сборщик мусора может удалить любой объект в памяти компьютера?
17 Ссылки The Java TM Virtual Machine Specification, Second Edition – Устройство JVM TI (Tool Interface): – _ti/index.html
Q&A
Спасибо! Андрей Дмитриев 2008 Виртуальная машина Java