添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

一、优化方案

1.使用此代码加载文件来使用临时文件

PDDocument document = PDDocument.load(file.getInputStream(), MemoryUsageSetting.setupTempFileOnly()
public static PDDocument load(InputStream input) throws IOException {
    return load((InputStream)input, "", (InputStream)null, (String)null, MemoryUsageSetting.setupMainMemoryOnly());
public static PDDocument load(InputStream input, MemoryUsageSetting memUsageSetting) throws IOException {
    return load((InputStream)input, "", (InputStream)null, (String)null, memUsageSetting);

2.及时关闭使用try-resouces关闭不用的流

try (PDDocument document = PDDocument.load(file.getInputStream(), MemoryUsageSetting.setupTempFileOnly()

3.设置下采样

PDFRenderer pdfRenderer = new PDFRenderer(document);
//允许下采样

pdfRenderer.setSubsamplingAllowed(true);

4.renderImageWithDPI 的dpi分辨率设置小一点最好不要超过300dpi,耗时量大容易崩溃

BufferedImage bim = pdfRenderer.renderImageWithDPI(page, dpi, ImageType.RGB);

5.设置xmx(设置jvm内存)

 nohup java -jar -Xms128m  -Xmx512m 
 nohup java -jar -Xms1g  -Xmx2g

6.DefaultResourceCache.java里的put方法用了SoftReference:无法回收

解决方案重写继承 DefaultResourceCache类的put方法不做任何处理

@Override
public void put(COSObject indirect, PDXObject xobject) throws IOException {
        xobjects.put(indirect, new SoftReference<PDXObject>(xobject));

7.分页处理及时释放不用的流

// 释放资源

   bim.flush();
    // 关闭PDF文档
   document.close();

pdf转图片上传oss预览

pdf转图片上传oss预览

使用PDFBox将超过80页的PDF文件转图片时,会占用很多的内存,期间还执行多次垃圾回收但是没啥子用。最近使用pdfbox 导入发现内存使用占用特别高,通过查阅官方资料发现pdfbox处理一些复杂的pdf 消耗内存特别高,这个是没法避免的,内存设置小的很有可能导致内存溢出。但它提供了一些可以减少内存使用的方案。具体代码就不写了,我从几个维度罗列一下。给大家使用pdfbox 后期做优化参考。这个默认使用的软引用如图:软引用是在内存即将溢出才会回收,所以也会生命周期会一直占用内存。 我正在尝试使用PDFBoxpdf文件的第一页转换为图像。 当我加载一个大的pdf文件时,我得到一个例外。码:PDDocument doc;try {InputStream input = new URL("http://www.jewishfederations.org/local_includes/downloads/39497.pdf").openStream();doc = PDDoc... 版本基于2.0.27最近使用pdfbx 导入发现内存使用占用特别高,通过查阅官方资料发现pdfbox处理一些复杂的pdf 消耗内存特别高,这个是没法避免的,内存设置小的很有可能导致内存溢出。但它提供了一些可以减少内存使用的方案。具体代码就不写了,我从几个维度罗列一下。给大家使用pdfbox 后期做优化参考。这个默认使用的软引用如图:软引用是在内存即将溢出才会回收,所以也会生命周期会一直占用内存咱们自定义不需要实现即可或者使用虚引用。 我们正在尝试使用PDFRenderer的方法renderImageWithDPI渲染来自不同PDF文件的图像。在特定的PDF上,对于某些页面,库渲染器具有不同的行为。PDFBox 2不寻常的内存消耗渲染本身比其他类似页面花费的时间更长,并且内存消耗达到非常大的值:进程消耗的内存每1到2秒增加约50MB,直到达到像5GB内存在renderImageWithDPI中由应用程序进程占用。一旦线程完成re... 公司里上了个项目,发现了pdfbox每次生成文件都大概要占用50m的内存,公司的云服务器成本控制只有8G,跑了一个小集群-nginx+tomcat为了保证业务稳定性的同时说一下有关于内存泄漏和读写文件加快速度的解决方案 1.jvm 首先是docker tomcat的jvm堆优化 打开tomcat的Catalina.sh JAVA_OPTS="-XX:+UseParallelGC -XX:+UseParallelOldGC -Xms512m -Xmx1536m -XX:NewSize=256m