Страницы

Поиск по вопросам

воскресенье, 9 февраля 2020 г.

Как устроены примитивные типы в Java?

#java #типы #реализация


Типы-обёртки (вроде Integer) это классы, которые вполне можно "пощупать" в исходниках
и понять как они устроены и работают. Как реализованы примитивные типы на уровне языка? 
    


Ответы

Ответ 1



Честно говоря опасаюсь, что не понимаю суть вопроса, но ответить всё же попробую. Возьмём для примера public class Example { public static void test() { int i = 69; } public static void main(String[] args) { test(); } } После компиляции исходный код превратится в class-файл содержащий байткод - инструкции виртуальной машины. В частности int i = 69 превратится в два байткода 0: bipush 69 2: istore_0 Команда java Example запустит виртуальную машину, которая загрузит файл Example.class в память, создаст главный поток и вызовет в нём метод main. При создании главного потока в off-heap памяти виртуальной машины для него будет создан стек. В момент вызова метода test в этом стеке будет создан фрейм. Каждый фрейм содержит массив 32-битных ячеек для хранения локальных переменных и аргументов метода, а также стек операндов. Да-да, стек в стеке. JVM - стековая виртуальная машина, в ней стек операндов служит тем же целям, что и регистры в процессоре. Виртуальная машина начнёт выполнять байткод метода с нулевого смещения, по которому расположен опкод bipush с операндом 69. Этот опкод поместит константу 69 на вершину стека операндов. Следующий опкод istore_0 возьмёт элемент с вершины стека операндов и поместит в 1-й элемент массива локальных переменных. "Пощупать" релизацию виртуальной машины, выполняющей байткод можно так же в исходниках. Правда, это будет уже C++, а не Java. Посмотреть код интерпретатора, выполняющийся для конкретного опкода, можно там же, но он платформозависим и в нём уже будет сплошной ассемблер.

Комментариев нет:

Отправить комментарий