Имеет ли ByteArrayOutputStream.close ()
реально освободить память?
Нет. Это абсолютно ничего не делает. Вы можете посмотреть его исходный код:
public void close() throws IOException {
}
Чтобы освободить память, убедитесь, что на нее нет ссылок, и пусть сборщик мусора сделает свое дело. Как и с любым другим нормальным объектом.
Потоки на основе файлов и сокетов являются особыми, поскольку они используют ресурсы ОС, не связанные с памятью (файловые дескрипторы), которые вы можете использовать независимо от памяти. Вот почему закрытие их явно важно. Но это не относится к чисто основанной на памяти ByteArrayOutputStream
.