可以在Java 8 VM中重现该问题。 正如@Tilman在他的回答中已经提到的,这是Java 8使用与以前的Java版本不同的颜色管理系统引入的一个问题。

通过使用新的色彩管理系统分析VM行为,可以清楚地发现问题实际上并不是内存泄漏问题(可能是由于过多的内存使用造成的)。 相反,实例化对象的速度快于垃圾回收可以收集和释放未使用的对象的速度!

通过更改PDFStreamEngine.processStreamOperators(PDContentStream)中页面内容解析的主循环,可以允许垃圾回收。

int i = 1; // new

while (token != null)

{

if (token instanceof COSObject)

{

arguments.add(((COSObject) token).getObject());

}

else if (token instanceof Operator)

{

processOperator((Operator) token, arguments);

arguments = new ArrayList();

}

else

{

arguments.add((COSBase) token);

}

token = parser.parseNextToken();

if (i++ % 1000 == 0) // new

Runtime.getRuntime().gc(); // new

}

( 1000是我凭空选择的任意值。)

这仍然很慢,但最终会创建位图,而不会占用过多的内存。

因此,看起来较旧的颜色管理系统实例化了较少的临时对象和/或显式允许垃圾收集介入的方式。

PS:以上更改不会加快速度 。 它只是防止观察到的OP 使用过多的内存 ,而在我的测试设置中,这会导致OutOfMemory情况。

如果OP完全控制部署环境,则他确实应该使用答案中显示的@Tilman选项。 但是,如果OP没有这样做,例如,如果他最终将其部署到Web服务器上,则他将不进行管理,并且如果管理员不想将其添加到JVM启动选项中,则他至少可以防止过多的内存使用。

pdfbox java.lang.outofmemoryerror_java - PDFBox 2.0.1挂起渲染pdf页面 - 堆栈内存溢出相关推荐

  1. pdfbox java.lang.outofmemoryerror_Apache PDFBox 1.8.11 发布,Java 的 PDF 处理类

    Apache PDFBox 1.8.11 发布,此版本是个增量 bug 修复版本,包括大量 bug 修复和改进. 现已提供下载: 主要改进内容: Bug 修复 [PDFBOX-962] - All s ...

  2. pdfbox java.lang.outofmemoryerror_Apache PdfBox

    业务叙述 技术是为了业务服务的,所以讨论技术的时候离不开业务场景.故此先进行简述: 最近在做一个从数据库读取pdf文件并且解析成文字进行分析的功能.由于本人对垃圾回收也是略有涉猎,因此代码设计上基本不 ...

  3. java自带的unpack闪退,java - 使用requiresUnpack无法正常使用Maven构建的Spring Boot JAR - 堆栈内存溢出...

    我的POM看起来像这样: xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/ ...

  4. java多属性的map_java - 具有多个参数的MapStruct QualifiedByName - 堆栈内存溢出

    目前,MapStruct不支持具有多个源属性的映射方法. 但是,在您的情况下,您可以使用1.2.0中的@Context . 根据我的理解, projId和code就像映射的帮助器一样,它们不用于映射目 ...

  5. java 图片有损压缩_java - 用有损jpeg压缩多页tiff图像 - 堆栈内存溢出

    将图像从16位减少到8位. 假设您有一个byte []变量plane16,在其中您有图像的所有像素. 注意 :我的byte [] plane16从16位图像获取数据,但是byte为8bit = 1by ...

  6. java算球体积的代码_java - 球体体积法不起作用 - 堆栈内存溢出

    为了使球体体积法起作用,我尝试了许多不同的计算方法. 我的Sphere类是从Circle扩展的,以从圆中获取面积,并实现了Shape3D接口,该接口允许我使用体积方法. 但是,我已经为我的方法尝试了所 ...

  7. 编写Java程序 堆栈的接口_java - 错误:调用实现接口的通用方法时,java.lang.AbstractMethodError - 堆栈内存溢出...

    我正在尝试使用javassist以编程方式创建和编译实现接口的类(在运行时). 每当我调用该动态类的实例时,都会收到以下错误消息: java.lang.AbstractMethodError: Foo ...

  8. java多表查询实体接收_java - 如何创建Criteria Builder查询以连接具有一对一和多对一实体关系的三个表? - 堆栈内存溢出...

    我想创建一个用于连接三个表的条件构建器查询. 我已经研究了互联网,但是三个表连接的所有示例都具有与我想要的关系不同的关系. 因此,我有三个具有以下结构的表: 并且实体如下: @Entity @Tabl ...

  9. android和flask交互,java - 当我从Android向Flask Web服务发送参数时,如何解决“ SSL库故障”? - 堆栈内存溢出...

    我确实尝试将一些值作为" application / json "从Android应用程序发送到Flask Web服务. 这是我的Java代码 : Thread thread = ...

最新文章

  1. 700页!分享珍藏很久的《推荐系统学习手册》(附下载链接及入门经验)
  2. 【Linux入门到精通系列讲解】shell脚本语法入门教程(看一篇就够了)
  3. Alternating Least Squares(ASL) for Implicit Feedback Datasets的数学推导以及用Python实现
  4. SqlHelper中IN集合场景下的参数处理
  5. 做外贸如何获取同行的价格体系?转至【【Mr.Harris 原创】
  6. 电子商务公司的职能架构及基础岗位职能
  7. 单手撑跨栏、两个空翻,终于看到了比人厉害的机器人
  8. 《走遍中国》珍藏版(十)
  9. Java分布式锁的概念以及使用优点
  10. Java面试题分享,这份资料包你值得拥有!
  11. 从技术解析到实战演练,三步get文本信息抽取
  12. C语言进制转换相关函数
  13. 校验码(循环冗余校验码)
  14. php xml 修改节点值,.NET_XML文件修改节点属性值(多种方法),xml 文件内容: 复制代码 代码如 - phpStudy...
  15. IDEA 之搭建spring-boot maven报错Project ‘org.springframework.boot:spring-boot-starter-parent:2.2.0.RELEAS
  16. 超详细的Android APP 集成 PayPal 境外支付 信用卡 借记卡 支付,支付宝 微信海外 境外支付
  17. P1024 [NOIP2001 提高组] 一元三次方程求解 /1238:一元三次方程求解
  18. 完善人格的好办法 [转]
  19. 如何使用条码标签软件的模板库
  20. 父亲母亲-给父亲唱一首歌

热门文章

  1. git commit撤销_Git 实用操作:撤销 Commit 提交
  2. 陕西省高等数学竞赛_关于参加“陕西高校第十二次大学生高等数学竞赛”的通知...
  3. 新乡医学院2018计算机考试题,新乡医学院继教2018级局部解剖学复习自测下肢答案...
  4. 盘一盘 synchronized (一)—— 从打印Java对象头说起
  5. @RequestBody配合@JsonFormat注解实现字符串自动转换成Date
  6. CKEditor的使用,并实现图片上传
  7. 移动端UI自动化Appium测试——Appium server两种启动方式
  8. linux 安装postgres 全文检索支持
  9. 常见的注册界面实现的效果
  10. [VB.NET]文件观察对象FileSystemWatcher