I'm using flying-saucer library to export html content as pdf manual. The problem is that for the huge amount of html documents my server fails with OOM error (pls. see memory dump analysis attached - memory_consumption_5000htmlpages.png). It seems this library firstly "painting" whole pdf in memory, and then write it to the file.
So instead of layout whole html content and rendering it after, I updated (and tested) ITextRenderer to layout and paint page-by-page (https://github.com/Mak-Sym/flyingsaucer/commit/eef611d4dd2f7780478dcfde712dfa23be44bfd4).
In my fork I also wrapped OutpuStream to track streaming operations, and it seems content is streamed to file after adding each page (pdf_export_page_by_page.log - I added DocListener to listen onPageAdded events and correlate them with streaming the data to the file). But it seems rendered page objects still remains in memory (memory_consumption_after_each_page_rendering.png - Y axis is heap consumption, bytes, X axis is number of the page rendered, GC before each measurement).
Is there a way to make "layouted" and "painted" objects eligible got GC somehow, so this library doesn't consumes all the heap memory on huge pdf exports?
Thank you in advance, -Maks.
- pdf_export_page_by_page.log 2.42KB
Status: New
Labels:
Type-Defect
Priority-Medium