Оптимизация памяти в классе StringBuffer работает за счёт динамического изменения размера внутреннего массива символов или байтов. 1
Класс не может заранее знать, сколько памяти ему понадобится при работе со строками. 2 Поэтому заранее резервирует дополнительную область памяти «на всякий случай», например, если строка при обработке будет увеличиваться в размерах. 2
Если зарезервированного размера памяти оказывается недостаточно, то происходит выделение новой области памяти (также с некоторым запасом) и туда копируется текущая строка. 2
Чтобы изменить минимальную ёмкость буфера символов, используется метод ensureCapacity(). 23 Например, если текущий массив становится недостаточно большим для хранения строки, этот метод увеличивает размер массива. 1
Вне зависимости от ёмкости, длина строки, которую можно получить с помощью метода length(), в StringBuffer остаётся прежней. 23