2016-06-24 8 views
0

내가 pdf를 이미지로 변환하려고하면 일부 pdfs에서 "메모리 부족"오류가 발생합니다. 그래서 힙 크기를 늘린 다음 다른 PDF 파일에 대한 오류가 다시 발생했습니다. 다른 개체에서 메모리 누수가 없다고 가정합니다. 그렇다면이 메모리에 오류가있는 이유는 무엇입니까? 이미지가 큽니다 (생각하지는 않습니다). 힙을 사용합니다. 그렇지 않으면 pdfbox가 각 페이지의 버퍼링 된 이미지를 메모리에 저장하고 이것이 힙 크기를 늘리는 데 도움이됩니까? 어떤 통찰력도 훌륭합니다.PDF 렌더링을 사용한 PDF 렌더링

다음은 렌더링하려는 PDF에 대한 링크입니다. https://drive.google.com/file/d/0B_Ke2amBgdpeNFFDem5KVVVzanc/view?usp=sharing 다음은 코드 세그먼트입니다.

PDFRenderer pdfRenderer = new PDFRenderer(pdDoc); 
BufferedImage image = pdfRenderer.renderImageWithDPI(page-1, 300,ImageType.GRAY); 
//image=ImageHelper.convertImageToGrayscale(image); 
ImageIOUtil.writeImage(image,"G:/Trial/tempImg.png", 300); 

이 특정 PDF 문제에 대한 그 힙 크기를 증가시켜 해결하지만 내가 알고 싶은 것은 메모리에 이미지를 버퍼 pdfbox 저장을 수행하고 힙 크기에 기여 즉했다 유의하시기 바랍니다.

힙 크기를 늘린 후에도 같은 문제에 직면 한 또 다른 pdf가 있습니다. https://drive.google.com/file/d/0B_Ke2amBgdpedDBtaG1QcW1oYlU/view?usp=sharing 이 pdf에서 내 코드는 44 페이지를 렌더링하는 동안 영원히 필요합니다. 왜 이런 일이 발생하는지 알 수 없습니다.

+0

어쩌면 변환하려는 내용과 코드 스 니펫을 추가하십시오. – Zeromus

+0

내 게시물을 편집하고 코드 및 파일을 업로드했습니다. – ANKIT

+1

메모리 사용에 관해서 : 만약 내가 잘못 본 게 아니라면 pdfbox는 (특히 컬러 이미지와 함께) 많은 메모리를 사용합니다. 예, 필요하지 않더라도 메모리에 모든 페이지를 보관합니다 (1 년 전쯤에 또는 그래서 그들은 readOnDemand/사용법 후에 제거하십시오 그러나 나는 최신이라고 유지하지 않았다). 메모리를 절약하기 위해 스크래치 파일을 사용해도되지만 속도는 느려질 수 있습니다. – Zeromus

답변

0

글쎄,이 문제는 버그 나 메모리 누수가 아닌 이미지 크기 때문인 것 같습니다. 제안 된 솔루션 : - 1) Xmx 크기를 늘리십시오 2) 64 비트 JVM으로 전환하십시오.

편집 : 답변 해 주셔서 감사합니다. 나는 여기에 그것을 놓을 것이다. @Tilman Hausherr가 테스트를 수행했으며 결과는 힙 크기를 늘려야한다는 것이 었습니다. 64 비트 jvm이 사용 된 것을 유의하십시오.

+0

JDK7 64 비트에서 한 파일은 -Xmx90m에서 작동하고 다른 하나는 -Xmx400m에서 작동합니다. –

+0

예, Xmx 크기를 늘리는 것은 수정 사항이지만 pdf 파일이 너무 많으면 힙이 가득 차게됩니다 .Hey @TilmanHausherr, 위의 코드를 다시 image.flush() 행을 넣어 주시면 저에게 해 줄 수 있습니까? 너무 여러 번 누른 다음 힙 덤프를 참조하십시오. pdf로 할 수 있습니다. 결과를 알려주십시오. 내 결과 : - 반복 횟수가 많아서 종료 횟수가 너무 많아 종료 횟수가 너무 많습니다. – ANKIT

+0

시간이 좀 걸릴 것입니다. 내 PC는 6 살입니다. 그리고 나는 방을 조금 식힐 수 있도록 밤에는 보통 꺼야합니다. –