Оценка памяти для хранения одного примитива byte в LinkedList<Byte>:
byte: Занимает 1 байт сам по себе.Byte: В LinkedList хранятся объекты, а не примитивы. byte будет автоматически упакован в объект Byte. Объект Byte содержит:
value: 1 байт (для самого значения типа byte).LinkedList.Node: Каждый элемент в LinkedList обернут в экземпляр внутреннего класса Node. Этот узел содержит:
item: Ссылка на хранимый объект (в данном случае, объект Byte). Ссылка обычно занимает 4 или 8 байт (в зависимости от 32- или 64-битной JVM и использования сжатых указателей).next: Ссылка на следующий узел. 4 или 8 байт.prev: Ссылка на предыдущий узел. 4 или 8 байт.Минимальная оценка (32-бит JVM без сжатых указателей):
Byte: 12 байт (заголовок) + 1 байт (значение) + 3 байта (выравнивание) = ~16 байт.Node: 12 байт (заголовок) + 4 байта (ссылка item) + 4 байта (ссылка next) + 4 байта (ссылка prev) + 4 байта (выравнивание) = ~28 байт.Типичная оценка (64-бит JVM со сжатыми указателями - по умолчанию для кучи < 32ГБ):
Byte: 12 байт (заголовок) + 1 байт (значение) + 3 байта (выравнивание) = ~16 байт.Node: 12 байт (заголовок) + 4 байта (ссылка item) + 4 байта (ссылка next) + 4 байта (ссылка prev) + 0 байт (выравнивание, если поля уже выровнены до 8 байт) = ~24 байта.Максимальная оценка (64-бит JVM без сжатых указателей):
Byte: 12 байт (заголовок) + 1 байт (значение) + 3 байта (выравнивание) = ~16 байт.Node: 12 байт (заголовок) + 8 байт (ссылка item) + 8 байт (ссылка next) + 8 байт (ссылка prev) + 4 байта (выравнивание) = ~40 байт (или 36+4).Таким образом, оценка памяти для хранения одного примитива типа byte в LinkedList<Byte> составляет приблизительно 40-60 байт из-за накладных расходов на объект-обертку Byte и узел LinkedList.Node. Это значительно больше, чем 1 байт самого примитива.