Gymterview
middle

Оцените количество памяти на хранение одного примитива типа byte в LinkedList

LinkedList не может хранить примитивы напрямую — значение byte автоматически упаковывается в объект Byte (autoboxing). Кроме самого значения, каждый элемент хранится в объекте Node с тремя ссылками.

Для x32 JVM:

  • Node: заголовок 8 байт + 3 ссылки по 4 байта = 20 байт, с padding = 24 байта
  • Byte: заголовок 8 байт + 1 байт данных = 9 байт, с padding = 16 байт
  • Итого: 24 + 16 = 40 байт

Для x64 JVM:

  • Node: заголовок 16 байт + 3 ссылки по 8 байт = 40 байт
  • Byte: заголовок 16 байт + 1 байт данных = 17 байт, с padding = 24 байта
  • Итого: 40 + 24 = 64 байта

Значения byte от -128 до 127 кэшируются в Byte.cache, поэтому новые объекты Byte для них не создаются — используются ссылки на кэшированные экземпляры. Но Node создается при каждом add().

На собеседовании: покажите, что умеете считать расходы памяти. Упомяните autoboxing, кэш Byte, заголовок объекта и padding.