2016-11-28 8 views
1

PDF-файл загружается впервые, со следующего раза он выдает java.lang.OutOfMemoryError: Java heap space . В настоящее время максимального размера кучи 536 MBjava.lang.OutOfMemoryError: куча Java-кучи - при написании pdf-файла для вывода

httpResp.setHeader("Expires", "0"); 
httpResp.setHeader("Cache-Control", "must-revalidate, post-check=0, pre-check=0"); 
httpResp.setHeader("Pragma", "public"); 
httpResp.setHeader("Content-Disposition", "inline; filename="+"BulkIdCard"+".pdf"); 
httpResp.setContentType("application/pdf"); 
httpResp.getOutputStream().write(byte[]);//pdf in byte array 
httpResp.getOutputStream().flush(); 
httpResp.getOutputStream().close(); 
+0

Насколько велики эти документы в формате PDF и какая-то ручка для первого документа, где-то торчат? –

+0

Ваша куча может обрабатывать первый байт [], созданный при первой загрузке, и когда вы загружаете ее снова, снова создается еще один байт [], который не соответствует вашей назначенной емкости Java Heap. Создаете ли вы новый байт [] каждый раз, когда вы получаете запрос на загрузку? – vvtx

+0

@TimBiegeleisen Размер файла зависит от того, на нем может быть 1 страница или может составлять 50 страниц. для одного протестированного потока размер PDF составляет 7 МБ, а количество страниц - 14. –

ответ

0

С немного везения PDF генерируется, как массив байт с использованием ByteArrayOutputStream. Переписывание на метод, параметризованный с помощью OutputStream, и должен пройти httpResp.getOutputStream().

Однако хороший момент для проверки полученного PDF-файла для избыточных данных. Добавление не удаляет устаревшие данные, повторяющиеся изображения должны храниться только один раз и так далее. Сравнение с оптимизатором PDF или чистой записью может дать указатели. Меньше данных, лучшее время отклика, загрузка сервера.

0

Поскольку максимальный размер вашей кучи в разы превышает ваш тестовый документ, маловероятно, что сама поставка контента потребляет столько памяти.

Либо окружающая среда времени выполнения потребляет столько памяти (например, Application Server, ...), либо у вас есть утечка памяти.

Если вы считаете, что инфраструктура не является проблемой, попробуйте проанализировать содержимое кучи -XX:+HeapDumpOnOutOfMemoryError, чтобы найти причину.

0

Вы можете указать до половины объема оперативной памяти в следующих командах. Например, если у вас есть 4 ГБ ОЗУ, укажите размер до 2048M в следующих командах. Если 2048 не работает, попробуйте с меньшим размером, скажем 2000M и т. Д. ... и так далее. Пожалуйста, проверьте это, когда вы используете в своей среде IDE будь то Netbeans или Eclipse и т. д. или увеличивать объем оперативной памяти.

java -Xms<size>  set initial Java heap size 

(OR) 

java -Xmx<size>  set maximum Java heap size 

 Смежные вопросы

  • Нет связанных вопросов^_^