Закрытие ByteArrayOutputStream не имеет никакого эффекта? - PullRequest
53 голосов
/ 25 февраля 2010

Что означает это утверждение «Закрытие ByteArrayOutputStream не имеет никакого эффекта» (http://java.sun.com/javase/6/docs/api/java/io/ByteArrayOutputStream.html#close()) означает?

Я хочу убедиться, что память в ByteArrayOutputStream освобождена. ByteArrayOutputStream.close() действительно освобождает память?

Спасибо.

1 Ответ

91 голосов
/ 25 февраля 2010

Имеет ли ByteArrayOutputStream.close () реально освободить память?

Нет. Это абсолютно ничего не делает. Вы можете посмотреть его исходный код:

public void close() throws IOException {
}

Чтобы освободить память, убедитесь, что на нее нет ссылок, и пусть сборщик мусора сделает свое дело. Как и с любым другим нормальным объектом.

Потоки на основе файлов и сокетов являются особыми, поскольку они используют ресурсы ОС, не связанные с памятью (файловые дескрипторы), которые вы можете использовать независимо от памяти. Вот почему закрытие их явно важно. Но это не относится к чисто основанной на памяти ByteArrayOutputStream.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...