Слайд 2За счет чего Java программы переносимы?
Дополнительный уровень, определяющий интерфейс к аппаратным ресурсам
![За счет чего Java программы переносимы? Дополнительный уровень, определяющий интерфейс к аппаратным ресурсам](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/409650/slide-1.jpg)
Слайд 3Программа
Что такое виртуальная машина?
Устройство и состав
![Программа Что такое виртуальная машина? Устройство и состав](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/409650/slide-2.jpg)
Слайд 4Java Virtual Machine
JVM - основная часть исполняющей системы Java, называемой Java Runtime
![Java Virtual Machine JVM - основная часть исполняющей системы Java, называемой Java Runtime Environment](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/409650/slide-3.jpg)
Environment
Слайд 5Основы
Устройство JVM специфицировано в 1996 году
JVM интерпретирует и исполняет байт-код Java
Байт-код может
![Основы Устройство JVM специфицировано в 1996 году JVM интерпретирует и исполняет байт-код](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/409650/slide-4.jpg)
исполняться на любой JVM подходящей версии
Для каждой аппаратной платформы используется своя JVM
Слайд 6Состав JVM
java – интерпретатор байт-кода
Куча (heap) – нераспределенная область динамической памяти предназначенная
![Состав JVM java – интерпретатор байт-кода Куча (heap) – нераспределенная область динамической](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/409650/slide-5.jpg)
для размещения объектов
Сборщик мусора (Garbage Collector, GC) – постоянно действующий код, освобождающий неиспользуемые куски памяти
Стек – структура данных, используемая для передачи параметров при вызове подпрограмм
Слайд 8Управление памятью - сборка мусора
Часто противопоставляется ручному управлению памятью
Упрощает процесс программирования
Предотвращает утечки
![Управление памятью - сборка мусора Часто противопоставляется ручному управлению памятью Упрощает процесс](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/409650/slide-7.jpg)
памяти
Но утечки могут происходить при невнимательном программировании
Позволяет оптимизировать размещение объектов
Система с реализованной сборкой мусора как правило менее производительна и более требовательна к ресурсам
Слайд 9Сборщик мусора JVM
Определяет объекты, которые в будущем не будут использоваться
Освобождает память, занятую
![Сборщик мусора JVM Определяет объекты, которые в будущем не будут использоваться Освобождает](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/409650/slide-8.jpg)
такими объектами
Все время находится в рабочем состоянии
Не предполагается никакого конкретного алгоритма работы
Влиять на работу сборщика мусора можно лишь косвенно:
Рекомендуя выполнять те или иные действия
Изменяя параметры запуска
Слайд 10Виды сборки мусора
Отслеживающий метод – обход графа и определение достижимости объекта
Использование поколений:
При
![Виды сборки мусора Отслеживающий метод – обход графа и определение достижимости объекта](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/409650/slide-9.jpg)
срабатывании сборщика мусора к значению неудаленного объекта прибавляется единица – сколько сборок мусора он пережил
Объекты с одинаковыми такими значениями образуют поколение
Сборщик мусора с большей вероятностью удаляет экземпляры только некоторых поколений
Слайд 11Ограничения
На один класс в константном пуле отводится максимум 65535 элементов
Длина кода
![Ограничения На один класс в константном пуле отводится максимум 65535 элементов Длина](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/409650/slide-10.jpg)
метода ограничена 65535 байтами
Число слов аргументов в вызове метода ограничено 255
Слайд 12Структура класс-файла
ClassFile {
u4 magic; u2 minor_version; u2 major_version; u2 constant_pool_count; cp_info
![Структура класс-файла ClassFile { u4 magic; u2 minor_version; u2 major_version; u2 constant_pool_count;](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/409650/slide-11.jpg)
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
При запуске приложения (класса) виртуальная машина выполняет следующие действия:
Загрузка класса
![Исполнение программы Java При запуске приложения (класса) виртуальная машина выполняет следующие действия:](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/409650/slide-12.jpg)
по его идентификатору загрузчиком классов (ClassLoader)
Верификация - проверка того, что структура класса верна (инструкции имеют корректные коды, методы имеют сигнатуры)
Подготовка - присваивание значений по умолчанию статическим полям класса
Разрешение - все ссылки проверяются (заменяются на прямые ссылки)
Инициализация - выполнение статического инициализирующего блока и присваивание значений статическим полям
Слайд 14Выгрузка класса
Класс может быть выгружен, если его загрузчик стал недоступен
Системные классы не
![Выгрузка класса Класс может быть выгружен, если его загрузчик стал недоступен Системные](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/409650/slide-13.jpg)
могут быть выгружены ввиду того, что загрузчик системных классов доступен всегда во время работы JVM
Слайд 15Прерывание работы JVM
JVM прекращает свою работу, если выполнено одно из условий:
Все потоки,
![Прерывание работы JVM JVM прекращает свою работу, если выполнено одно из условий:](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/409650/slide-14.jpg)
не являющиеся демонами, завершены
Один из потоков вызвал метод exit() и данная операция была разрешена менеджером безопасности
Слайд 16Правда ли что…
Формат класс-файла четко формализован?
Размер кучи можно изменять во время работы
![Правда ли что… Формат класс-файла четко формализован? Размер кучи можно изменять во](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/409650/slide-15.jpg)
JVM?
При недостатке длины стека он автоматически увеличивается до необходимого размера?
Сборщик мусора может удалить любой объект в памяти компьютера?
Слайд 17Ссылки
The JavaTM Virtual Machine Specification, Second Edition
http://java.sun.com/docs/books/jvms/
Устройство JVM TI (Tool Interface):
![Ссылки The JavaTM Virtual Machine Specification, Second Edition http://java.sun.com/docs/books/jvms/ Устройство JVM TI (Tool Interface): http://java.sun.com/developer/technicalArticles/J2SE/jvm_ti/index.html](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/409650/slide-16.jpg)
http://java.sun.com/developer/technicalArticles/J2SE/jvm_ti/index.html