
- •JAVA-ТЕХНОЛОГИЯ
- •Виртуальная машина
- •Достоинства
- •Недостатки
- •Виртуальная машина Java
- •Архитектура Java VM
- •Типы данных
- •Регистр PC (счетчик
- •Куча
- •Область методов (1/2)
- •Область методов (2/2)
- •Константный пул
- •Стековый фрейм (stack frame)
- •Стеки(1/2)
- •Стеки(2/2)
- •Локальные переменные
- •Возврат из методов
- •Инструкции(1/4).
- •Инструкции(2/4)
- •Инструкции(3/4)
- •Инструкции(4/4)
- •Java HotSpot
- •Особенности
- •JIT и HotSpot(1/2)
- •JIT и HotSpot(2/2)
- •Мониторинг
- •Class-файлы
- •Файл класса(1/3)
- •Файл класса(2/3)
- •Файл класса(3/3)
- •Пример: Структура поля
- •Атрибуты
- •Атрибут Code
- •Ограничения
- •Пример class-файла(1/2)
- •Пример class-файла(2/2)
- •Литература
Инструкции(4/4)
Ещё пример:
void whileInt() { int i = 0;
while (i < 100) { i++;
} |
} |
Method void whileInt() |
|
|
0 iconst_0 |
|
1 istore_1 |
|
2 goto 8 |
|
5 iinc 1 1 |
|
8 iload_1 |
|
9 bipush 100 |
|
11 if_icmplt 5 |
|
14 return |
(С) Сафонов В.О. 2013

Java HotSpot
(С) Сафонов В.О. 2013
Особенности
Существует две модификации – для клиентских и для серверных машин.
У каждой модификации свой компилятор.
Поддержка операций с 64-битовыми данными.
Упаковка объектов.
Все классы находятся в куче (и могут быть удалены).
Простые и native-методы используют один и тот же стек.
Продвинутая сборка мусора(с возможностью выбора алгоритма).
(С)Сафонов В.О. 2013
JIT и HotSpot(1/2)
JIT – динамический компилятор, компилирует байт-код в код целевой платформы.
HotSpot анализирует код на частоту выполнения и использует JIT для компиляции «горячих точек» (20% кода – 80% времени).
HotSpot может производить подстановку методов (inlining).
Возможность деоптимизации и реоптимизации кода.
(С) Сафонов В.О. 2013

JIT и HotSpot(2/2)
(С) Сафонов В.О. 2013
Мониторинг
Jconsole – простейшая программа для мониторинга Java приложений.
jsp и jstat – утилиты для мониторинга java- приложений
Набор пакетов javax.management и java.lang.management
Средства мониторинга в среде Solaris.
(С) Сафонов В.О. 2013

Class-файлы
(С) Сафонов В.О. 2013
Файл класса(1/3)
Представлен в виде потока байтов.
Все многобайтовые величины представлены в виде последовательности байтов (старшие байты – первые).
uN – это представление элемента из N байтов. (u1, u2,…).
Поддерживается интерфейсами java.io.DataInput, java.io.DataOutput и классами java.io.DataInputStream и java.io.DataOutputStream.
(С)Сафонов В.О. 2013
Файл класса(2/3)
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[attributes_count]; |
// атрибутах |
}
(С) Сафонов В.О. 2013
Файл класса(3/3)
Числа major_version и minor_version вместе образуют номер версии файла
this_class, super_class а также interfaces[ ] указывают на некоторые элементы пула констант.
Каждый файл содержит таблицу только своих полей и методов.
Поля описываются с помощью специальных символов(I –
для int, D – для double, и т.д.). double d[][][] - это
[[[D (описываются в специальных элементах пула констант: CONSTANT_Utf8_info).
Методы описываются параметрами и возвращаемым значением
Object mymethod(int i, double d, Thread t)
-> (IDLjava/lang/Thread;)Ljava/lang/Object;
Каждый элемент пула констант имеет первым байтом
некоторое значение, определяющее его тип.
(С)Сафонов В.О. 2013