Spec-Zone.ru › Java Virtual Machine Specification 21

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

Java SE 21 Edition

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

Фрэнк Йеллин

Гилад Браха

Алекс Бакли

Даниэл Смит

23.08.2023

Правовая информация

Оглавление

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.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.7.30. Атрибут Record
4.7.31. Атрибут PermittedSubclasses
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. Фреймы карты стека и переходы типов
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. Загрузка с использованием загрузчика Bootstrap
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<op>
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<op>
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<cond>
if_icmp<cond>
if<cond>
ifnonnull
ifnull
iinc
iload
iload_
imul
ineg
instanceof
invokedynamic
invokeinterface
invokespecial
invokestatic
invokevirtual
ior
irem
ireturn
ishl
ishr
istore
istore<n>
isub
iushr
ixor
jsr
jsr_w
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
lstore
lstore<n>
lsub
lushr
lxor
monitorenter
monitorexit
multianewarray
new
newarray
nop
pop
pop2
putfield
putstatic
ret
return
saload
sastore
sipush
swap
tableswitch
wide
7. Мемоиники OPCODE по OPCODE
A. Ограниченное предоставление лицензии

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

Spec-Zone.ru

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