Я запускаю свое приложение под профилировщиком. Класс, который потребляет больше всего памяти, - это char[]
, что в моем приложении составляет около 10 КБ.
Затем я создал InputStream
(точнее PipedInputStream
), который содержит данные байтового массива размером 300 МБ.
Затем я посмотрел на свой профилировщик, и я не вижу каких-либо существенных изменений (нигде не вижу, чтобы что-то съедало 300 МБ).
Вопрос в том, если эти 300 МБ байтового массива не находятся в памяти, где Java хранит их?
[Update]
Дополнительная информация о том, как я получил 300 МБ для моего PipedInputStream
:
Я занимаюсь разработкой веб-приложения с механизмом загрузки файлов.
И в одном из процессов загрузки файла я создаю поток ввода (PipedInputStream
). В основном,
- Я прочитал входной поток мультифайла (несколько килобайт байта [] за раз),
- Создано
PipedOutputStream
- Создано
PipedInputStream
(передача недавно созданного выходного потока в конструктор)
- Записал входной поток из нескольких частей в my
PipedOutputStream
(работающий в отдельном потоке; он очищает и закрывает этот выходной поток перед выходом из потока). На данный момент у меня есть копия байтов составной части в моем собственном входном потоке
- Затем (случайно) сохранил этот входной поток в моем сеансе http (обсуждение / дискуссия о том, будет ли это хорошей идеей, будет по другому вопросу)
Итак, вопрос снова в том, где Java хранит содержимое моего InputStream
(я его не вижу в профайлере)?
[Update # 2]
У меня есть FileOutputStream
, который читает из PipedInputStream
и записывает в файл.