为有中文需求的客户提供多渠道中文技术支持.

Mon May 23, 2022 3:14 am

public static void main(String args[]){
PdfDocument pdf = new PdfDocument();
try {
pdf.loadFromFile("E:\\software\\junZhiWork\\项目文档\\bp测评案例-20211021\\博威能源.pdf");
pdf.saveToFile("E:\\software\\junZhiWork\\项目文档\\bp测评案例-20211021\\html\\博威能源.html", FileFormat.HTML);
pdf.dispose();
pdf = null;
System.gc();
}catch (Exception e){
e.printStackTrace();
}finally {
System.gc();
System.gc();
System.out.println("暂停--------------");
System.gc();
System.gc();
System.gc();
System.gc();
System.gc();
System.gc();
}
}

zhengyunfeng
 
Posts: 5
Joined: Mon May 23, 2022 2:27 am

Mon May 23, 2022 9:34 am

您好,

感谢您的咨询。

为了帮助我们进一步调查您提到的问题,能否请您提供更详细的信息?例如您的测试步骤、相关的测试文档(PDF)以及内存使用情况等。提前感谢您的协助。
Sincerely,
Andy
E-iceblue support team
User avatar

Andy.Zhou
 
Posts: 483
Joined: Mon Mar 29, 2021 3:03 am

Mon May 23, 2022 10:34 am

具体内存的大小占用情况请查看压缩包文件。任何pdf文件都可以。上传文件大小有限制,就不提供了。

zhengyunfeng
 
Posts: 5
Joined: Mon May 23, 2022 2:27 am

Tue May 24, 2022 9:57 am

您好,

感谢您分享的说明和代码。

按照您的测试步骤和代码,我使用其他PDF文档也复现了您描述的问题。我已将此问题移交给研发团队进行调查优化,问题编号是SPIREPDF-5219。有任何进展我会及时反馈给您。
再次感谢您的反馈和协助。
Sincerely,
Andy
E-iceblue support team
User avatar

Andy.Zhou
 
Posts: 483
Joined: Mon Mar 29, 2021 3:03 am

Mon Jun 13, 2022 5:51 am

请问,该问题的修复有进展了吗。因为该问题导致项目验收无法通过啊。期望尽快能够给与答复。或能够提供临时方案去解决该问题。

zhengyunfeng
 
Posts: 5
Joined: Mon May 23, 2022 2:27 am

Mon Jun 13, 2022 6:54 am

您好,

关于这个问题,研发那边调查分析了原因。根据测试出的结果看,产品的dispose和close方法释放了PdfDocument对象中的多数子对象。但JVM的垃圾回收器并不会马上回收被置为空引用的对象并释放内存。在本地进行测试时,通过内存分析工具可以发现,内存并没有在短时间内有明显下降,但在1分50秒左右,JVM垃圾回收器完成了对象的释放。
screenshot.png

因此,如果您需要提前释放,只能尝试调用System.gc()来主动回收。
Sincerely,
Andy
E-iceblue support team
User avatar

Andy.Zhou
 
Posts: 483
Joined: Mon Mar 29, 2021 3:03 am

Mon Jun 13, 2022 10:26 am

System.gc()调用也只是通知jvm进行内存回收,并不一定100%会触发实际的资源回收。问题可能就出在这个地方吧。本地测试调用System.gc()也不会立刻回收内存的。

zhengyunfeng
 
Posts: 5
Joined: Mon May 23, 2022 2:27 am

Mon Jun 13, 2022 10:37 am

请问贵公司研发那边是否有进一步的调研发现为啥jvm垃圾回收没有立刻生效。是否有未发现的子对象没有进行处理。

zhengyunfeng
 
Posts: 5
Joined: Mon May 23, 2022 2:27 am

Tue Jun 14, 2022 8:15 am

您好,

根据研发那边反馈的消息,我们产品相关对象都进行了清理。但JVM何时回收垃圾不是用户能决定的。而且正如您提到的,System.gc()只是告诉JVM,用户需要清理回收垃圾,但JVM实际执行与否以及何时执行,也是它自己的调度决定的。因此,调用System.gc()后,也无法保证资源一定会马上进行回收,但这也不失为一个尚且可行的方法。
Sincerely,
Andy
E-iceblue support team
User avatar

Andy.Zhou
 
Posts: 483
Joined: Mon Mar 29, 2021 3:03 am

Return to 中文技术支持