2013-10-16 18 views
0

在我的應用程序中,我必須在填充一些值後打開一個可編輯的PDF文件。爲了填充值,我使用庫中的PdfReader,PdfStamper & AcroFields類。在填充值之後,我將所有這些對象都設爲null。如何使用iTextPDF和Qoppa打開PDF文件後釋放堆內存?

PDF文件顯示在使用Qoppa Library類(如PDFDocument,QPDFNotesView)的活動中。我的應用程序使用的堆大小是一致的,直到我打開PDF。第一次打開PDF後,堆大小非常高。從第二次起,堆的大小逐漸增加,但略有增加。連續打開PDF 3或4次後,由於java.lang.OutOfMemoryError而導致應用程序崩潰。

如果我只打開一次PDF,堆大小保持不變,直到我下次運行應用程序爲止。當我完成該活動時,我已將上述課程的所有對象設爲無效。

問題是這樣的:有一次我使用這些對象,即使我使用後廢棄

堆大小從來沒有下來。

我使用itextpdf-5.1.3.jarqoppapdf.jar作爲私人圖書館。 任何人都可以幫我解決這個問題嗎?提前致謝...

+1

你'關閉'PdfReader'對象嗎? –

+0

不完全...我只是把它設爲NULL。現在,我在關閉它後檢查,但沒有影響... –

+0

您是否使用探查器來確定問題是由iText還是Qoppa引起的?請注意,我記得一些內存問題在與5.1.3版本相比更新的字體相關的iText中得到修復。 –

回答

0

調用QPDFNotesView類的releaseDocument()方法後,釋放內存有一個公平的進度。

我們有所謂的使用後此方法的對象

QPDFNotesView viewer = new QPDFNotesView(this); 

在最後

viewer.releaseDocument(); 

這解決了我的問題的延伸。