При вызове ArrayList.add() дополнительная память требуется в двух случаях:
Добавление элемента: Для хранения самого добавляемого элемента. Размер зависит от типа элемента.
Изменение размера внутреннего массива: Если текущий размер внутреннего массива ArrayList недостаточен для вмещения нового элемента, происходит его расширение. По умолчанию ArrayList удваивает размер массива (умножает на 1.5 в последних версиях JDK).
Объем дополнительной памяти при расширении равен размеру нового массива (примерно 1.5 * текущая_вместимость). Это происходит не при каждом вызове add(), а только при достижении текущей вместимости.
Таким образом, минимальная дополнительная память требуется для хранения элемента, а максимальная - для нового массива при расширении.