Типы-обёртки (вроде Integer) это классы, которые вполне можно "пощупать" в исходниках и понять как они устроены и работают. Как реализованы примитивные типы на уровне языка?
Ответ
Честно говоря опасаюсь, что не понимаю суть вопроса, но ответить всё же попробую. Возьмём для примера
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. Посмотреть код интерпретатора, выполняющийся для конкретного опкода, можно там же, но он платформозависим и в нём уже будет сплошной ассемблер.
Комментариев нет:
Отправить комментарий