我们正在尝试使用 PDFRenderer 的方法 renderImageWithDPI 渲染来自不同 PDF 文件的图像。在特定的 PDF 中,对于某些页面,库渲染器具有不同的行为。
渲染本身比其他类似页面花费更长的时间,并且内存消耗达到异常大的值:进程消耗的内存每 1-2 秒增加大约 50MB,直到达到应用程序消耗的 5GB RAM 之类的值在 renderImageWithDPI 中处理。一旦线程完成 renderImageWithDPI,内存消耗几乎立即下降 1.5 - 2 GB。由于高内存消耗,有时会抛出 Java Heap Space Exception。
发生这种情况的页面与其他页面没有明显不同,具有相同的宽度、高度和磁盘大小。使用 250 DPI 和 ImageType RGB 完成渲染。此外,应用程序使用“-Dsun.java2d.cmm=sun.java2d.cmm.kcms.KcmsServiceProvider”参数运行。
这是内存泄漏还是预期的行为?另外,有人可以解释为什么有些页面会占用 2GB 内存并需要 1 分钟才能呈现,而另一些页面会在几秒钟内呈现?