Оптимизация памяти Java (как избежать утечки памяти - конкретный пример) - PullRequest
2 голосов
/ 28 января 2011

Я создал PDF-файл в своем веб-приложении на Java и отправляю его как вложение электронной почты. PDF создается как массив byte[]. Лучше обернуть это в ByteArrayInputStream или я должен оставить это как byte[].

Обертывание может быть лучше для освобождения памяти (прочитайте принятый ответ в этом потоке), но недостатком будет то, что InputStream (если я прав) создает копию массива ( читать здесь ).

Что лучше, чтобы избежать возможности иметь боровов памяти?

1 Ответ

3 голосов
/ 28 января 2011

Нет, ByteArrayInputStream оборачивает массив, он не копирует его. Из документации (конструктора, взяв byte[]):

Создает ByteArrayInputStream, чтобы он использовал buf в качестве своего буферного массива. Буферный массив не копируется. Начальное значение pos равно 0, а начальное значение count равно длине buf. * ​​1010 *

Возможно, что использует , входной поток скопирует его, но сам ByteArrayInputStream не будет.

Я не уверен, что вы действительно волнуетесь по поводу особенно важной проблемы - я не думаю, что это вообще приведет к утечке памяти, если использовать только байтовый массив.

...