使用 pdfreader itext 版本 5.5.0 时内存不足异常
outofmemory exception when using pdfreader itext version 5.5.0
使用 pdfreader 阅读 pdf 时遇到一个奇怪的问题。(itext)
PdfReader reader = PdfReader(bytearray).
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Arrays.java:3236) at
java.io.ByteArrayOutputStream.grow(ByteArrayOutputStream.java:118) at
java.io.ByteArrayOutputStream.ensureCapacity(ByteArrayOutputStream.java:93)
at
java.io.ByteArrayOutputStream.write(ByteArrayOutputStream.java:153)
at com.itextpdf.text.pdf.PdfReader.FlateDecode(PdfReader.java:2071)
at com.itextpdf.text.pdf.PdfReader.FlateDecode(PdfReader.java:1926)
at
com.itextpdf.text.pdf.FilterHandlers$Filter_FLATEDECODE.decode(FilterHandlers.java:108)
at com.itextpdf.text.pdf.PdfReader.decodeBytes(PdfReader.java:2476)
at com.itextpdf.text.pdf.PdfReader.decodeBytes(PdfReader.java:2424)
at
com.itextpdf.text.pdf.PdfReader.getStreamBytes(PdfReader.java:2489)
at com.itextpdf.text.pdf.PdfReader.readObjStm(PdfReader.java:1430)
at com.itextpdf.text.pdf.PdfReader.readDocObj(PdfReader.java:1365)
at com.itextpdf.text.pdf.PdfReader.readPdf(PdfReader.java:672) at
com.itextpdf.text.pdf.PdfReader.(PdfReader.java:181) at
com.itextpdf.text.pdf.PdfReader.(PdfReader.java:250) at
com.itextpdf.text.pdf.PdfReader.(PdfReader.java:240)
pdf 大约是 20 兆字节。奇怪的是,这在 2020 年在我的旧电脑上有效。几个月前我换了电脑。突然弹出这个错误。有什么想法吗 ?我在 intellij 中尝试过,没有 luck.intellij 配置看起来像这样。 intellij 2019.3.5 社区版
> -Xms512m
> -Xmx820m
> -XX:ReservedCodeCacheSize=1024m
> -XX:+UseConcMarkSweepGC
> -XX:SoftRefLRUPolicyMSPerMB=50
> -ea
> -XX:CICompilerCount=2
> -Dsun.io.useCanonPrefixCache=false
> -Djava.net.preferIPv4Stack=true
> -Djdk.http.auth.tunneling.disabledSchemes=""
> -XX:+HeapDumpOnOutOfMemoryError
> -XX:-OmitStackTraceInFastThrow
> -Djdk.attach.allowAttachSelf=true
> -Dkotlinx.coroutines.debug=off
> -Djdk.module.illegalAccess.silent=true
有什么想法吗?我正在使用 windows 10、64 位系统- java 8
将我的评论转换为答案,因为 OP 说它有助于解决问题:
增加堆-Xmx1500m
(甚至-Xmx2048m
)。
旁注:为什么要使用这么大的代码缓存大小?您可以轻松地将 -XX:ReservedCodeCacheSize=512m
减半(甚至更多 -XX:ReservedCodeCacheSize=256m
)。要了解您真正需要的内容,您可以使用 jconsole 和 select code cache
部分。
使用 pdfreader 阅读 pdf 时遇到一个奇怪的问题。(itext)
PdfReader reader = PdfReader(bytearray).
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space at java.util.Arrays.copyOf(Arrays.java:3236) at java.io.ByteArrayOutputStream.grow(ByteArrayOutputStream.java:118) at java.io.ByteArrayOutputStream.ensureCapacity(ByteArrayOutputStream.java:93) at java.io.ByteArrayOutputStream.write(ByteArrayOutputStream.java:153) at com.itextpdf.text.pdf.PdfReader.FlateDecode(PdfReader.java:2071) at com.itextpdf.text.pdf.PdfReader.FlateDecode(PdfReader.java:1926) at com.itextpdf.text.pdf.FilterHandlers$Filter_FLATEDECODE.decode(FilterHandlers.java:108) at com.itextpdf.text.pdf.PdfReader.decodeBytes(PdfReader.java:2476) at com.itextpdf.text.pdf.PdfReader.decodeBytes(PdfReader.java:2424) at com.itextpdf.text.pdf.PdfReader.getStreamBytes(PdfReader.java:2489) at com.itextpdf.text.pdf.PdfReader.readObjStm(PdfReader.java:1430) at com.itextpdf.text.pdf.PdfReader.readDocObj(PdfReader.java:1365) at com.itextpdf.text.pdf.PdfReader.readPdf(PdfReader.java:672) at com.itextpdf.text.pdf.PdfReader.(PdfReader.java:181) at com.itextpdf.text.pdf.PdfReader.(PdfReader.java:250) at com.itextpdf.text.pdf.PdfReader.(PdfReader.java:240)
pdf 大约是 20 兆字节。奇怪的是,这在 2020 年在我的旧电脑上有效。几个月前我换了电脑。突然弹出这个错误。有什么想法吗 ?我在 intellij 中尝试过,没有 luck.intellij 配置看起来像这样。 intellij 2019.3.5 社区版
> -Xms512m
> -Xmx820m
> -XX:ReservedCodeCacheSize=1024m
> -XX:+UseConcMarkSweepGC
> -XX:SoftRefLRUPolicyMSPerMB=50
> -ea
> -XX:CICompilerCount=2
> -Dsun.io.useCanonPrefixCache=false
> -Djava.net.preferIPv4Stack=true
> -Djdk.http.auth.tunneling.disabledSchemes=""
> -XX:+HeapDumpOnOutOfMemoryError
> -XX:-OmitStackTraceInFastThrow
> -Djdk.attach.allowAttachSelf=true
> -Dkotlinx.coroutines.debug=off
> -Djdk.module.illegalAccess.silent=true
有什么想法吗?我正在使用 windows 10、64 位系统- java 8
将我的评论转换为答案,因为 OP 说它有助于解决问题:
增加堆-Xmx1500m
(甚至-Xmx2048m
)。
旁注:为什么要使用这么大的代码缓存大小?您可以轻松地将 -XX:ReservedCodeCacheSize=512m
减半(甚至更多 -XX:ReservedCodeCacheSize=256m
)。要了解您真正需要的内容,您可以使用 jconsole 和 select code cache
部分。