
- •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)
- •Литература
Пример: Структура поля
field_info { |
|
|
u2 access_flags; |
//модификатор доступа |
|
u2 name_index; |
//имя |
|
u2 descriptor_index; |
//описание |
|
u2 attributes_count; |
//атрибуты |
attribute_info attributes[attributes_count];
}
• name_index и descriptor_index являются ссылками на соответствующие элементы пула констант.
(С) Сафонов В.О. 2013
Атрибуты
Содержат некоторую информацию о классе, поле или методе.
Делятся на несколько типов в зависимости от того, что они описывают (исключения, тело методов, локальные переменные и др.).
Могут иметь сложное строение (атрибут, описывающий тело метода).
Могут игнорироваться виртуальной машиной.
(С)Сафонов В.О. 2013
Атрибут Code
Code_attribute {
u2 attribute_name_index;
u4 attribute_length;
u2 max_stack; //определяет размер фрейма стека
u2 max_locals; //определяет размер локальных переменных
u4 code_length;
u1 code[code_length]; // здесь записаны инструкции Java-машины u2 exception_table_length; //обработчик исключений
{u2 start_pc;
u2 end_pc;
u2 handler_pc;
u2 catch_type;
} exception_table[exception_table_length]; u2 attributes_count;
attribute_info attributes[attributes_count];
}
(С) Сафонов В.О. 2013
Ограничения
Длина кода метода ограничена 65536 символами.
Тело метода не может быть пустым.
Каждый переход по метке должен происходить в теле данного метода.
Нельзя создать массив с количеством измерений более 255.
(С) Сафонов В.О. 2013
Пример class-файла(1/2)
public class SuperClass{ int superElement;
}
class MyClass extends SuperClass{ int [ ]mass = new int[10];
int el;
public MyClass(int i){ el = i;
}
public int get(){ return el;
}
public void set(int sign){ el = sign;
}
public void count(){ el++;
}
}
(С) Сафонов В.О. 2013

Пример class-файла(2/2)
Кюєѕ 1 mass [I el I <init> (I)V Code LineNumberTable LocalVariableTable this Lsimple1/MyClass; i get ()I set sign count ()V SourceFile SuperClass.java simple1/MyClass simple1/SuperClass
R*· *јµ *µ ±
/*ґ ¬
>*µ ±
9
*Yґ `µ ± ! "
(С) Сафонов В.О. 2013

Литература
1.The Java Virtual Machine Specification. Second Edition
2.Bill Venners. The Java Virtual Machinе
3.http://java.sun.com/javase/technologies/hotspot/in
dex.jsp
(С) Сафонов В.О. 2013