Spec-Zone.ru › Java Virtual Machine Specification 11

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

Java SE 11 Edition

Тим Линдхольм

Фрэнк Йеллин

Гилад Браха

Алекс Бакли

Даниэль Смит

21.08.2018

Юридическое уведомление

Содержание

1. Введение
1.1. Немного истории
1.2. Виртуальная машина Java
1.3. Структура спецификации
1.4. Нотация
1.5. Обратная связь
2. Структура виртуальной машины Java
2.1. Формат файла class
2.2. Типы данных
2.3. Примитивные типы и значения
2.3.1. Целочисленные типы и значения
2.3.2. Типы с плавающей точкой, множества значений и значения
2.3.3. Тип returnAddress и значения
2.3.4. Тип boolean
2.4. Ссылочные типы и значения
2.5. Области данных во время выполнения
2.5.1. Регистр pc
2.5.2. Стек виртуальной машины Java
2.5.3. Куча
2.5.4. Область методов
2.5.5. Пул констант во время выполнения
2.5.6. Стек методов нативных функций
2.6. Фреймы
2.6.1. Локальные переменные
2.6.2. Стек операндов
2.6.3. Динамическая компоновка
2.6.4. Завершение нормального вызова метода
2.6.5. Завершение вызова метода с ошибкой
2.7. Представление объектов
2.8. Арифметика с плавающей точкой
2.8.1. Арифметика с плавающей точкой виртуальной машины Java и IEEE 754
2.8.2. Режимы с плавающей точкой
2.8.3. Преобразование множества значений
2.9. Специальные методы
2.9.1. Методы инициализации экземпляров
2.9.2. Методы инициализации классов
2.9.3. Полиморфные методы сигнатуры
2.10. Исключения
2.11. Сводка набора инструкций
2.11.1. Типы и виртуальная машина Java
2.11.2. Инструкции загрузки и сохранения
2.11.3. Арифметические инструкции
2.11.4. Инструкции преобразования типов
2.11.5. Создание и обработка объектов
2.11.6. Инструкции управления стеком операндов
2.11.7. Инструкции передачи управления
2.11.8. Инструкции вызова и возврата методов
2.11.9. Бросание исключений
2.11.10. Синхронизация
2.12. Библиотеки классов
2.13. Публичный дизайн, закрытая реализация
3. Компиляция для виртуальной машины Java
3.1. Формат примеров
3.2. Использование констант, локальных переменных и управляющих конструкций
3.3. Арифметика
3.4. Доступ к пулу констант во время выполнения
3.5. Дополнительные примеры управления
3.6. Прием аргументов
3.7. Вызов методов
3.8. Работа с экземплярами классов
3.9. Массивы
3.10. Компиляция переключателей
3.11. Операции со стеком операндов
3.12. Бросание и обработка исключений
3.13. Компиляция finally
3.14. Синхронизация
3.15. Аннотации
3.16. Модули
4. Формат файла class
END_OF_DOCUMENT_MARKER
4.1. Структура ClassFile
4.2. Имена
4.2.1. Имена двоичных классов и интерфейсов
4.2.2. Неквалифицированные имена
4.2.3. Имена модулей и пакетов
4.3. Дескрипторы
4.3.1. Нотация грамматики
4.3.2. Дескрипторы полей
4.3.3. Дескрипторы методов
4.4. Пул констант
4.4.1. Структура CONSTANT_Class_info
4.4.2. Структуры CONSTANT_Fieldref_info, CONSTANT_Methodref_info и CONSTANT_InterfaceMethodref_info
4.4.3. Структура CONSTANT_String_info
4.4.4. Структуры CONSTANT_Integer_info и CONSTANT_Float_info
4.4.5. Структуры CONSTANT_Long_info и CONSTANT_Double_info
4.4.6. Структура CONSTANT_NameAndType_info
4.4.7. Структура CONSTANT_Utf8_info
4.4.8. Структура CONSTANT_MethodHandle_info
4.4.9. Структура CONSTANT_MethodType_info
4.4.10. Структуры CONSTANT_Dynamic_info и CONSTANT_InvokeDynamic_info
4.4.11. Структура CONSTANT_Module_info
4.4.12. Структура CONSTANT_Package_info
4.5. Поля
4.6. Методы
4.7. Атрибуты
4.7.1. Определение и именование новых атрибутов
4.7.2. Атрибут ConstantValue
4.7.3. Атрибут Code
4.7.4. Атрибут StackMapTable
4.7.5. Атрибут Exceptions
4.7.6. Атрибут InnerClasses
4.7.7. Атрибут EnclosingMethod
4.7.8. Атрибут Synthetic
4.7.9. Атрибут Signature
4.7.9.1. Подписи
4.7.10. Атрибут SourceFile
4.7.11. Атрибут SourceDebugExtension
4.7.12. Атрибут LineNumberTable
4.7.13. Атрибут LocalVariableTable
4.7.14. Атрибут LocalVariableTypeTable
4.7.15. Атрибут Deprecated
4.7.16. Атрибут RuntimeVisibleAnnotations
4.7.16.1. Структура element_value
4.7.17. Атрибут RuntimeInvisibleAnnotations
4.7.18. Атрибут RuntimeVisibleParameterAnnotations
4.7.19. Атрибут RuntimeInvisibleParameterAnnotations
4.7.20. Атрибут RuntimeVisibleTypeAnnotations
4.7.20.1. Объединение target_info
4.7.20.2. Структура type_path
4.7.21. Атрибут RuntimeInvisibleTypeAnnotations
4.7.22. Атрибут AnnotationDefault
4.7.23. Атрибут BootstrapMethods
4.7.24. Атрибут MethodParameters
4.7.25. Атрибут Module
4.7.26. Атрибут ModulePackages
4.7.27. Атрибут ModuleMainClass
4.7.28. Атрибут NestHost
4.7.29. Атрибут NestMembers
4.8. Проверка формата
4.9. Ограничения на код виртуальной машины Java
4.9.1. Статические ограничения
4.9.2. Структурные ограничения
4.10. Проверка файлов class
4.10.1. Проверка путём проверки типов
4.10.1.1. Доступы к артефактам виртуальной машины Java
4.10.1.2. Система типов проверки
4.10.1.3. Представление инструкций
4.10.1.4. Кадры stack map и переходы типов
4.10.1.5. Проверка типов абстрактных и нативных методов
4.10.1.6. Проверка типов методов с кодом
4.10.1.7. Проверка типов инструкций загрузки и сохранения
4.10.1.8. Проверка типов для членов protected
4.10.1.9. Проверка типов инструкций
aaload
aastore
aconst_null
aload, aload_<n>
anewarray
areturn
arraylength
astore, astore_<n>
athrow
baload
bastore
bipush
caload
castore
checkcast
d2f, d2i, d2l
dadd
daload
dastore
dcmp<op>
dconst_<d>
ddiv
dload, dload_<n>
dmul
dneg
drem
dreturn
dstore, dstore_<n>
dsub
dup
dup_x1
dup_x2
dup2
dup2_x1
dup2_x2
f2d, f2i, f2l
fadd
faload
fastore
fcmp<op>
fconst_<f>
fdiv
fload, fload_<n>
fmul
fneg
frem
freturn
fstore, fstore_<n>
fsub
getfield
getstatic
goto, goto_w
i2b, i2c, i2d, i2f, i2l, i2s
iadd
iaload
iand
iastore
iconst_<i>
idiv
if_acmp<cond>
if_icmp<cond>
if<cond>
ifnonnull, ifnull
iinc
iload, iload_<n>
imul
ineg
instanceof
invokedynamic
invokeinterface
invokespecial
invokestatic
invokevirtual
ior, irem
ireturn
ishl, ishr, iushr
istore, istore_<n>
isub, ixor
l2d, l2f, l2i
ladd
laload
land
lastore
lcmp
lconst_<l>
ldc, ldc_w, ldc2_w
ldiv
lload, lload_<n>
lmul
lneg
lookupswitch
lor, lrem
lreturn
lshl, lshr, lushr
lstore, lstore_<n>
lsub, lxor
monitorenter, monitorexit
multianewarray
new
newarray
nop
pop, pop2
putfield
putstatic
return
saload
sastore
sipush
swap
tableswitch
wide
4.10.2. Проверка по типу вывода
4.10.2.1. Процесс проверки по типу вывода
4.10.2.2. Верификатор байткода
4.10.2.3. Значения типов long и double
4.10.2.4. Методы инициализации экземпляров и вновь созданные объекты
4.10.2.5. Исключения и finally
4.11. Ограничения виртуальной машины Java
5. Загрузка, линковка и инициализация
5.1. Постоянный пул констант во время выполнения
5.2. Запуск виртуальной машины Java
5.3. Создание и загрузка
5.3.1. Загрузка с помощью загрузчика базового класса
5.3.2. Загрузка с помощью пользовательского загрузчика класса
5.3.3. Создание классов массивов
5.3.4. Ограничения загрузки
5.3.5. Получение класса из представления файла class
5.3.6. Модули и слои
5.4. Линковка
5.4.1. Проверка
5.4.2. Подготовка
5.4.3. Разрешение
5.4.3.1. Разрешение класса и интерфейса
5.4.3.2. Разрешение поля
5.4.3.3. Разрешение метода
5.4.3.4. Разрешение метода интерфейса
5.4.3.5. Разрешение типа метода и дескриптора метода
5.4.3.6. Разрешение динамически вычисляемых констант и сайтов вызова
5.4.4. Контроль доступа
5.4.5. Переопределение метода
5.4.6. Выбор метода
5.5. Инициализация
5.6. Связывание реализаций методов нативных методов
5.7. Выход из виртуальной машины Java
6. Набор инструкций виртуальной машины Java
6.1. Предположения: значение «должен»
6.2. Зарезервированные коды операций
6.3. Ошибки виртуальной машины
6.4. Формат описаний инструкций
mnemonic
6.5. Инструкции
aaload
aastore
aconst_null
aload
aload_
anewarray
areturn
arraylength
astore
astore_
athrow
baload
bastore
bipush
caload
castore
checkcast
d2f
d2i
d2l
dadd
daload
dastore
dcmp
dconst_
ddiv
dload
dload_
dmul
dneg
drem
dreturn
dstore
dstore_
dsub
dup
dup_x1
dup_x2
dup2
dup2_x1
dup2_x2
f2d
f2i
f2l
fadd
faload
fastore
fcmp
fconst_
fdiv
fload
fload_
fmul
fneg
frem
freturn
fstore
fstore_
fsub
getfield
getstatic
goto
goto_w
i2b
i2c
i2d
i2f
i2l
i2s
iadd
iaload
iand
iastore
iconst_
idiv
if_acmp
if_icmp
if
ifnonnull
ifnull
iinc
iload
iload_
imul
ineg
instanceof
invokedynamic
invokeinterface
invokespecial
invokestatic
invokevirtual
ior
irem
ireturn
ishl
ishr
istore
istore_
isub
iushr
ixor
jsr
jsr_w
l2d
l2f
l2i
ladd
laload
land
lastore
lcmp
lconst_
ldc
ldc_w
ldc2_w
ldiv
lload
lload_
lmul
lneg
lookupswitch
lor
lrem
lreturn
lshl
lshr
lstore
lstore_
lsub
lushr
lxor
monitorenter
monitorexit
multianewarray
new
newarray
nop
pop
pop2
putfield
putstatic
ret
return
saload
sastore
sipush
swap
tableswitch
wide
7. Мемоиничные коды операций по коду операции
A. Ограниченное предоставление лицензии

© Oracle and/or its affiliates. All rights reserved.
Licensed under the Oracle Technology Network License Agreement.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API