如何解决Java堆空间不足的OutOfMemoryError错误?
如何解决Java堆空间不足的OutOfMemoryError错误?
看起来你在用jpdfbookmarks处理53M的PDF文件时遭遇了Java堆内存溢出的问题,我来分享几个可行的解决方案:
1. 调整JVM堆内存参数(最直接有效)
你当前命令里设置的最大堆内存是-Xmx512m,但53M的PDF文件在处理时需要完整加载到内存,再加上iText库本身的内存开销,512M的堆空间确实可能不够用。你可以尝试增大最大堆内存的限制,比如调整为1GB甚至2GB:
java -Xms256m -Xmx1024m -jar "/home/t/programs/jpdfbookmarks-2.5.2/jpdfbookmarks.jar" ./in.pdf -apply bmks.jpdf -o out.pdf
-Xms256m:设置初始堆内存为256MB,减少JVM动态扩容的额外开销-Xmx1024m:设置最大堆内存为1GB,给程序足够的空间处理大体积PDF
如果1GB还是不够,可以继续调高到-Xmx2048m(2GB),具体数值可以根据你的系统可用内存灵活调整。
2. 其他优化建议
- 检查jpdfbookmarks版本:如果使用的是旧版本,可能存在内存泄漏问题,尝试升级到最新版看看是否能改善内存占用情况
- 关闭后台冗余程序:处理大文件时,关闭系统中其他占用内存较多的程序,给JVM腾出更多可用的系统内存
你提供的错误详情、文件及JVM信息
执行命令:
java -Xms64m -Xmx512m -splash: -jar "/home/t/programs/jpdfbookmarks-2.5.2/jpdfbookmarks.jar" ./in.pdf -apply bmks.jpdf -o out.pdf
错误栈追踪:
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space at com.lowagie.text.pdf.MappedRandomAccessFile.clean(MappedRandomAccessFile.java:203) at com.lowagie.text.pdf.MappedRandomAccessFile.close(MappedRandomAccessFile.java:178) at com.lowagie.text.pdf.RandomAccessFileOrArray.close(RandomAccessFileOrArray.java:295) at com.lowagie.text.pdf.PRTokeniser.close(PRTokeniser.java:128) at com.lowagie.text.pdf.PdfReader.readPdf(PdfReader.java:526) at com.lowagie.text.pdf.PdfReader.<init>(PdfReader.java:165) at com.lowagie.text.pdf.PdfReader.<init>(PdfReader.java:154) at it.flavianopetrocchi.jpdfbookmarks.itextbookmarksconverter.iTextBookmarksConverter.save(iTextBookmarksConverter.java:397) at it.flavianopetrocchi.jpdfbookmarks.Applier.save(Unknown Source) at it.flavianopetrocchi.jpdfbookmarks.JPdfBookmarks.applySave(Unknown Source) at it.flavianopetrocchi.jpdfbookmarks.JPdfBookmarks.apply(Unknown Source) at it.flavianopetrocchi.jpdfbookmarks.JPdfBookmarks.start(Unknown Source) at it.flavianopetrocchi.jpdfbookmarks.JPdfBookmarks.main(Unknown Source)
文件信息:
$ ls -lh total 60M -rw-r--r-- 1 t users 14K Oct 10 20:14 bmks.jpdf -rw-r--r-- 1 t users 53M Oct 10 20:30 in.pdf
JVM信息:
$ java --version openjdk 17.0.3 2022-04-19 OpenJDK Runtime Environment (build 17.0.3+7-nixos) OpenJDK 64-Bit Server VM (build 17.0.3+7-nixos, mixed mode, sharing)
备注:内容来源于stack exchange,提问作者Tim
相关产品推荐
相关产品推荐

