Gymterview
junior

Сколько необходимо дополнительной памяти при вызове ArrayList.add()

Если в массиве достаточно свободных ячеек, дополнительной памяти не требуется — элемент записывается в следующую ячейку. Если массив заполнен, создается новый массив размером в 1.5 раза больше текущего (oldCapacity + (oldCapacity >> 1) в JDK 8+), и все элементы копируются в него.

Например, при capacity = 10 новый массив будет иметь capacity = 15. Это означает, что в момент расширения потребуется дополнительно newCapacity * referenceSize байт памяти (кратковременно в памяти будут оба массива). После копирования старый массив станет доступен для сборки мусора.

На собеседовании: скажите, что при наличии места — 0 дополнительной памяти. При расширении — создается массив в 1.5 раза больше. Уточните формулу роста для JDK 8+.