[ 
https://issues.apache.org/jira/browse/PDFBOX-3376?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15326531#comment-15326531
 ] 

Yan commented on PDFBOX-3376:
-----------------------------

I've discovered that finalize method is not always called after object loses 
all it's references, so Warnings was due to my lack of Java knowledge.

And the new thing I've found out is that JVM doesn't like to release memory 
back to OS.

Bug may be closed, sorry for confusion :)

> Memory leak in PDDcoument.close method
> --------------------------------------
>
>                 Key: PDFBOX-3376
>                 URL: https://issues.apache.org/jira/browse/PDFBOX-3376
>             Project: PDFBox
>          Issue Type: Bug
>          Components: PDModel
>    Affects Versions: 2.0.1
>            Reporter: Yan
>         Attachments: Снимок экрана_2016-06-11_16-12-36.png, Снимок 
> экрана_2016-06-11_18-01-25.png
>
>
> PDFBox PDDocument still uses memory after destruction. This causes, 
> surprisingly, memory leaks in Java. Sample code:
> {code}
> import java.io.File;
> import java.io.IOException;
> import java.util.List;
> import java.util.Vector;
> import org.apache.pdfbox.pdmodel.PDDocument;
> //javac -cp pdfbox.jar:commons-logging.jar Mrg.java
> //java -cp pdfbox.jar:commons-logging.jar:. Mrg *pdf
> public class Mrg
> {
>       public static void main(String[] args) throws Exception
>       {
>               Runtime instance = Runtime.getRuntime();
>               System.err.println("Start: "+instance.totalMemory());
>               List <PDDocument> infiles = new Vector<PDDocument>();
>               String outname = "Output.pdf";
>               for(int i=0; i<args.length; i++)
>                       infiles.add(PDDocument.load(new File (args[i])));
>               PDDocument result = new PDDocument();
>               for (PDDocument input : infiles)
>               {
>                       int inpages = input.getNumberOfPages();                 
>                 
>                       for (int i=0; i<inpages; ++i)
>                               result.addPage(input.getPage(i));
>               }
>               try     {
>                       result.save(outname);
>               } catch (IOException e) {
>                       System.err.println(e.getMessage());
>                       System.exit(1);
>               }
>               result.close();
>               Thread.currentThread().sleep(1000);
>               System.err.println("All open: "+instance.totalMemory());
>               for (PDDocument i : infiles)
>                       i.close();
>               Thread.currentThread().sleep(1000);
>               System.err.println("All closed: "+instance.totalMemory());
>               (new java.util.Scanner(System.in)).nextLine();
>               System.err.println("Finish: "+instance.totalMemory());
>       }
> }
> {code}
> Mine output:
> >Start: 125829120
> >All open: 277872640
> >All closed: 277872640
> >rthrth
> >Finish: 277872640
> The same happens with my main program (I was blaming SwingWorker): 
> https://github.com/Yanpas/PdfMerger



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to