Schweik
Мыслитель
(6140)
1 год назад
Вообще то, это вопрос для капитана очевидности...
> Что означает дескриптор, что он делает и почему занимает именно такой объем памяти?
Дескриптор это описатель. Описывает он объект (в данном случае массив). Спецификация не накладывает на VM требований как будет описываться объект, но скорее всего это два указателя - на класс и на место в куче для данных объекта - отсюда и такой объем памяти для дескриптора. См. спецификация JVM глава вторая
Самый простой вариант — массив, для которого наперёд известно число элементов. В нём на каждый объект хранится ссылка: 4 (8) байт (в скобках значение для 64-битной JVM), кроме того хранится длина массива — int, 4 байта, и дескриптор объекта — 8 (16) байт. Вдобавок каждый объект выравнивается по 8 байтам из-за чего массивы с чётным числом элементов на 32bit теряют по 4 байта. Итог: по 4 (8) байт на объект плюс постоянная от 12 до 24 байт.
Что означает дескриптор, что он делает и почему занимает именно такой объем памяти?