Каждая ячейка памяти имеет свой адрес. Создавая переменную, мы привязываем её к адресу физической ячейки памяти. Таким образом, переменная в Java - это всего лишь ссылка на ячейку памяти по физическому адресу этой ячейки с указанием типа данных, который хранит эта ячейка:
Размер ячейки зависит от железа. И любой тип данных, за исключением строк и массивов, занимает полностью одну ячейку памяти. 8 байт (64 бита) - наименьшая величина стека. На современном железе ячейка памяти может занимать 16 байт (128 бит), 32 байта (256 бит), 64 байта (528 бит) и даже 128 байт (1024 бита).
Единица данных различного типа имеет различный объём в битах:
Но оказываясь в ячейке памяти, занимает её полностью:
С массивами дело обстоит немного по другому. Переменная массива имеет адрес начальной ячейки, а дальше - элементы массива "прилепляются" друг к другу и при заполнении собой одной ячейки памяти, начинают заполнять следующую по порядку адресации ячейку и т.д.:
Java может работать и с многомерными массивами, которые могут не являться матрицами и кубами - каждый подмассив может иметь различную размерность. Это усложняет работу и чтобы её упростить, принято двумерные массивы представлять в виде матриц, трёхмерные - в виде кубов и более многомерные - в виде n-кубов. В этом случае элементы многомерных массивов всё равно будут идти последовательно "в одну строку", но не будет проблем с пустыми ячейками при последовательном переборе элементов массива:
До встречи в следующем уроке.
|