Spec-Zone .ru
спецификации, руководства, описания, API
Содержание | Предыдущий | Следующий | Индекс


Спецификация Виртуальной машины JavaTM

Тим Линдхольм
Франк Еллин

(Преобразованный из печатной книги, сентябрь 1996, сначала печатая)



Предисловие xv

1 Введение 1

2 Понятия Java 5
2.1 Unicode 5
2.2 Идентификаторы 6
2.3 Литералы 6
2.4 Типы и Значения 6
2.4.1 Типы примитивов и Значения 7
2.4.2 Операторы на Интегральных Значениях 8
2.4.3 Операторы на Значениях С плавающей точкой 8
2.4.4 Операторы на булевых значениях 9
2.4.5 Ссылочные типы, Объекты, и Ссылочные Значения 9
2.4.6 Объект Класса 10
2.4.7 Строка Класса 10
2.4.8 Операторы на Объектах 10
2.5 Переменные 10
2.5.1 Начальные значения Переменных 12
2.5.2 У переменных Есть Типы, у Объектов Есть Классы 13
2.6 Преобразования и Продвижения 13
2.6.1 Преобразования идентификационных данных 14
2.6.2 Расширение Примитивных Преобразований 15
2.6.3 Сужение Примитивных Преобразований 15
2.6.4 Расширение Ссылочных Преобразований 16
2.6.5 Сужение Ссылочных Преобразований 16
2.6.6 Преобразование присвоения 17
2.6.7 Преобразование Вызова метода 18
2.6.8 Кастинг Преобразований 19
2.6.9 Числовое Продвижение 19
2.7 Имена и Пакеты 20
2.7.1 Имена 20
2.7.2 Пакеты 20
2.7.3 Элементы 21
2.7.4 Элементы пакета 21
2.7.5 Элементы Типа класса 21
2.7.6 Элементы Интерфейсного Типа 22
2.7.7 Элементы Типа 22 Массива
2.7.8 Полностью определенные имена и Управление доступом 22
2.7.9 Полностью определенные Имена 23
2.8 Классы 24
2.8.1 Имена классов 24
2.8.2 Модификаторы класса 24
2.8.3 Суперклассы и Подклассы 25
2.8.4 Элементы Класса 25
2.9 Поля 26
2.9.1 Полевые Модификаторы 26
2.9.2 Инициализация Полей 27
2.10 Метода 27
2.10.1 Формальные параметры 28
2.10.2 Подпись 28
2.10.3 Модификаторы метода 28
2.11 Статических Инициализатора 29
2.12 Конструктора 29
2.13 Интерфейса 30
2.13.1 Интерфейсные Модификаторы 31
2.13.2 Суперинтерфейсы 31
2.13.3 Интерфейсные Элементы 31
2.13.4 Интерфейсные (Постоянные) Поля 31
2.13.5 Интерфейсные (Абстрактные) Методы 32
2.13.6 Переопределение, Наследование, и Перегрузка в Интерфейсах 32
2.14 Массива 32
2.14.1 Типы массива 33
2.14.2 Переменные типа массив 33
2.14.3 Создание массива 34
2.14.4 Доступ массива 34
2.15 Исключения 34
2.15.1 Причины Исключений 35
2.15.2 Обработка Исключения 36
2.15.3 Иерархия Исключения 38
2.15.4 Исключение Классов и RuntimeException 38
2.16 Выполнения 40
2.16.1 Запуск Виртуальной машины 40
2.16.2 Загрузка 43
2.16.3 Соединение: Проверка, Подготовка, и Разрешение 43
2.16.4 Инициализация 46
2.16.5 Подробная Процедура 47 Инициализации
2.16.6 Создание Новых Экземпляров Класса 49
2.16.7 Завершение Экземпляров Класса 51
2.16.8 Завершение и Разгрузка Классов и Интерфейсов 52
2.16.9 Выход Виртуальной машины 52
2.17 Потока 53

3 Структуры виртуальной машины Java 57
3.1 Типы данных 57
3.2 Типы примитивов и Значения 58
3.2.1 Целочисленные типы и Значения 58
3.2.2 Типы с плавающей точкой и Значения 59
3.2.3 Тип returnAddress и Значения 60
3.2.4 Нет Никакого булева Типа 60
3.3 Ссылочные типы и Значения 61
3.4 Слова 61
3.5 Области Данных времени выполнения 61
3.5.1 Регистр pc 61
3.5.2 Стек Java 62
3.5.3 "Куча" 63
3.5.4 Область метода 63
3.5.5 Постоянный Пул 64
3.5.6 Собственные Стеки Метода 65
3.6 Фреймы 66
3.6.1 Локальные переменные 66
3.6.2 Стеки операнда 67
3.6.3 Динамическое подключение 67
3.6.4 Нормальное Завершение Метода 68
3.6.5 Аварийное Завершение Метода 68
3.6.6 Дополнительная информация 68
3.7 Представление Объектов 69
3.8 Специальные Методы Инициализации 69
3.9 Исключения 69
3.10 Формат файла класса 70
3.11 Сводки 71 Набора команд
3.11.1 Типы и виртуальная машина Java 72
3.11.2 Загрузка и Инструкции Хранилища 74
3.11.3 Арифметические Инструкции 75
3.11.4 Инструкции Преобразования типов 77
3.11.5 Объектное Создание и Манипулирование 79
3.11.6 Инструкции управления Стеком операнда 79
3.11.7 Инструкции Передачи управления 80
3.11.8 Вызов метода и Инструкции Возврата 80
3.11.9 Бросок и Обработка Исключений 81
3.11.10 Реализация наконец 81
3.11.11 Синхронизация 81
3.12 Общедоступных Проекта, Частная Реализация 81

4 Формат файла класса 83
4.1 ClassFile 84
4.2 Внутренняя Форма Полностью определенных Имен классов 89
4.3 Дескрипторы 89
4.3.1 Нотация 90 грамматики
4.3.2 Полевые Дескрипторы 90
4.3.3 Дескрипторы метода 91
4.4 Постоянный Пул 92
4.4.1 CONSTANT_Class 93
4.4.2 CONSTANT_Fieldref, CONSTANT_Methodref, и CONSTANT_InterfaceMethodref 94
4.4.3 CONSTANT_String 96
4.4.4 CONSTANT_Integer и CONSTANT_Float 96
4.4.5 CONSTANT_Long и CONSTANT_Double 97
4.4.6 CONSTANT_NameAndType 99
4.4.7 CONSTANT_Utf8 100
4.5 Поля 101
4.6 Методы 104
4.7 Атрибуты 106
4.7.1 Определение и Именование Новых Атрибутов 107
4.7.2 Атрибут SourceFile 108
4.7.3 Атрибут ConstantValue 109
4.7.4 Атрибут кода 110
4.7.5 Атрибут исключений 113
4.7.6 Атрибут LineNumberTable 115
4.7.7 Атрибут LocalVariableTable 116
4.8 Ограничения на Код виртуальной машины Java 118
4.8.1 Статические Ограничения 118
4.8.2 Структурные ограничения 121
4.9 Проверка Файлов класса 124
4.9.1 Процесс Проверки 125
4.9.2 Верификатор Байт-кода 128
4.9.3 Длинные целые и Удваивают 131
4.9.4 Методы Инициализации экземпляра и Недавно Создаваемые Объекты 131
4.9.5 Обработчики исключений 133
4.9.6 Исключения и наконец 133
4.10 Ограничения виртуальной машины Java и Формата файла класса 136

5 Постоянных Разрешений Пула 139
5.1 Класс и Интерфейсное Разрешение 140
5.1.1 Текущий Класс или Интерфейс, Не Загруженный Загрузчиком Класса 141
5.1.2 Текущий Класс или Интерфейс, Загруженный Загрузчиком Класса 144
5.1.3 Классы массива 146
5.2 Поле и Разрешение Метода 147
5.3 Интерфейсное Разрешение Метода 148
5.4 Строковое Разрешение 148
5.5 Разрешение Других Постоянных Элементов Пула 149

6 Наборов команд виртуальной машины Java 151
6.1 Предположения: Значение "Must" 151
6.2 Зарезервированные Коды операций 152
6.3 Ошибки Виртуальной машины 152
6.4 Набор команд виртуальной машины Java 152

7 Компиляции для виртуальной машины Java 339
7.1 Формат Примеров 340
7.2 Использование Констант, Локальных переменных, и Конструкций Управления 341
7.3 Арифметика 345
7.4 Доступ к Постоянному Пулу 346
7.5 Больше Примеров Управления 348
7.6 Получение Параметров 351
7.7 Вызов Методов 352
7.8 Работа с Экземплярами Класса 354
7.9 Массивы 356
7.10 Переключателей Компиляции 359
7.11 Операций на Стеке Операнда 361
7.12 Бросков и Обработка Исключений 362
7.13 Компиляции наконец 366
7.14 Синхронизаций 369

8 Потоков и Блокировки 371
8.1 Терминология и Платформа 371
8.2 Порядок выполнения и Непротиворечивость 373
8.3 Правила О Переменных 374
8.4 Неатомарная Обработка Двойных и Длинных Переменных 376
8.5 Правила О Блокировках 376
8.6 Правила О Взаимодействии Блокировок и Переменных 377
8.7 Правила для Энергозависимых Переменных 378
8.8 Наделенные даром предвидения Операции Хранилища 378
8.9 Обсуждение 379
8.10 Примеров: Возможная Подкачка 380
8.11 Примеров: не в порядке Записи 384
8.12 Потоков 386
8.13 Блокировок и Синхронизация 386
8.14 Ожидают Наборы и Уведомление 387

9 Оптимизация 389
9.1 Динамическое подключение через Перезапись 389
9.2 _quick Псевдоинструкции 390

10 Мнемоники Кода операции Кодом операции 429

Содержание | Предыдущий | Следующий | Индекс

Спецификация Виртуальной машины Java
Авторское право © 1996, 1997 Sun Microsystems, Inc. Все права защищены
Пожалуйста, отправьте любые комментарии или исправления к jvm@java.sun.com

free hit counter