Верификатор байткода
Обеспечивает:
1.Проверку загружаемого кода на соответствие требованиям текущей JVM.
2.Код не нарушает целостности системы.
3.Операнды не вызывают переполнение или недополнение (выход за нижнюю границу).
4.Корректность типов параметров в пределах текущей JVM.
21
Управление памятью с помощью сборки мусора
•Часто противопоставляется ручному управлению памятью
•Упрощает процесс программирования
•Предотвращает утечки памяти
–но утечки могут происходить при невнимательном программировании, поэтому лучше их избегать
•Позволяет оптимизировать размещение объектов
•Система с реализованной сборкой мусора как правило менее производительна и более требовательна к ресурсам
22
Сборщик мусора JVM
•Определяет объекты, которые в будущем не будут использоваться
•Освобождает память, занятую такими объектами
•Все время находится в рабочем состоянии
•Не предполагается никакого конкретного алгоритма работы
•Реализация может значительно отличаться в разных
JVM
•Влиять на работу сборщика мусора можно лишь косвенно:
–Рекомендуя выполнять те или иные действия
–Изменяя параметры запуска
23
Виды сборки мусора
•Отслеживающий метод – обход графа и определение достижимости объекта
•Использование поколений:
–При срабатывании сборщика мусора к значению неудаленного объекта прибавляется единица – сколько сборок мусора он пережил
–Объекты с одинаковыми такими значениями образуют поколение
–Сборщик мусора с большей вероятностью удаляет экземпляры только некоторых поколений
24
Поддерживаемые типы данных (этап компиляции)
byte |
1-байтовое со знаком, представленное в ДОК |
|
|
short |
2-байтовое со знаком, представленное в ДОК |
|
|
int |
4-байтовое со знаком, представленное в ДОК |
|
|
long |
8-байтовое со знаком, представленное в ДОК |
|
|
float |
вещественное число ОТ стандарта IEEE 754, занимающее 4 байта |
|
|
double |
вещественное число ДТ стандарта IEEE 754, занимающее 8 байт |
|
|
char |
символ Unicode, занимающий 2 байта |
|
|
object |
ссылка на объект, занимающая 4 байта |
|
|
returnAddress |
4 байта, используемые с инструкциями jsr/ret/jsr_w/ret_w |
|
|
Реализация логического типа неспецифицирована
25
Поддерживаемые типы данных (этап выполнения)
Actual Type |
Computational Type |
boolean |
int |
byte |
int |
char |
int |
short |
int |
int |
int |
float |
float |
reference |
reference |
returnAddress |
returnAddress |
long |
long |
double |
double |
26
Основные ограничения JVM
•Длина кода метода ограничена 65535 байтами
•Число слов аргументов в вызове метода ограничено 255
•Кол-во операций VM = 256 (можно провести аналогию с RISC-компьютером)
•Класс может быть выгружен, если его загрузчик стал недоступен
•Системные классы не могут быть выгружены ввиду того, что загрузчик системных классов доступен всегда во время работы JVM
27
Прерывание работы JVM
JVM прекращает свою работу если выполнено одно из условий:
•Все потоки, не являющиеся демонами, завершены (даже если метод main() уже завершился, но еще выполняются порожденные им потоки - система будет ждать их завершения)
•Один из потоков вызвал метод exit() и данная операция была разрешена менеджером безопасности
Пример простого Java-приложения
29
Компиляция и выполнение приложения TestGreeting
Компиляция TestGreeting.java:
javac TestGreeting.java
При этом Greeting.java будет скомпилирован автоматически.
Запуск приложения:
java TestGreeting
30