2010-07-30 9 views
0

비행 접시를 사용하여 매우 큰 PDF를 만드는 중이며 메모리가 부족한 것 같습니다.비행 접시 (xhtmlrenderer) 메모리 부족

다음은 비행 접시가 완전히 확장 가능하지 않다는 것을 나에게 제안하는 몇 가지 스택 추적입니다 ... 아니면 내가 잘못된 것을하고 있습니까?

java.lang.OutOfMemoryError: Java heap space 
     at com.sun.org.apache.xerces.internal.util.XMLStringBuffer.append(XMLStringBuffer.java:205) 
     at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.refresh(XMLDocumentScannerImpl.java:1520) 
     at com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.invokeListeners(XMLEntityScanner.java:2070) 
     at com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.scanLiteral(XMLEntityScanner.java:1063) 
     at com.sun.org.apache.xerces.internal.impl.XMLScanner.scanAttributeValue(XMLScanner.java:974) 
     at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanAttribute(XMLNSDocumentScannerImpl.java:460) 
     at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(XMLNSDocumentScannerImpl.java:277) 
     at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2747) 
     at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:648) 
     at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:140) 
     at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:510) 
     at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:807) 
     at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737) 
     at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:107) 
     at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205) 
     at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transformIdentity(TransformerImpl.java:637) 
     at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:708) 
     at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:313) 
     at org.xhtmlrenderer.resource.XMLResource$XMLResourceBuilder.createXMLResource(XMLResource.java:189) 
     at org.xhtmlrenderer.resource.XMLResource.load(XMLResource.java:71) 

java.lang.OutOfMemoryError: Java heap space 
    at java.util.Arrays.copyOf(Arrays.java:2882) 
    at java.lang.AbstractStringBuilder.expandCapacity(AbstractStringBuilder.java:100) 
    at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:597) 
    at java.lang.StringBuffer.append(StringBuffer.java:329) 
    at org.xhtmlrenderer.css.newmatch.Matcher$Mapper.mapChild(Matcher.java:385) 
    at org.xhtmlrenderer.css.newmatch.Matcher.matchElement(Matcher.java:153) 
    at org.xhtmlrenderer.css.newmatch.Matcher.getMapper(Matcher.java:235) 
    at org.xhtmlrenderer.css.newmatch.Matcher.getCascadedStyle(Matcher.java:85) 
    at org.xhtmlrenderer.context.StyleReference.getCascadedStyle(StyleReference.java:199) 
    at org.xhtmlrenderer.layout.SharedContext.getStyle(SharedContext.java:548) 
    at org.xhtmlrenderer.layout.SharedContext.getStyle(SharedContext.java:527) 
    at org.xhtmlrenderer.layout.BoxBuilder.createChildren(BoxBuilder.java:1069) 
    at org.xhtmlrenderer.layout.BoxBuilder.createChildren(BoxBuilder.java:113) 
    at org.xhtmlrenderer.render.BlockBox.ensureChildren(BlockBox.java:902) 
    at org.xhtmlrenderer.layout.BoxBuilder.createChildren(BoxBuilder.java:1115) 
    at org.xhtmlrenderer.layout.BoxBuilder.createChildren(BoxBuilder.java:113) 
    at org.xhtmlrenderer.render.BlockBox.ensureChildren(BlockBox.java:902) 
    at org.xhtmlrenderer.layout.BoxBuilder.createChildren(BoxBuilder.java:1135) 

답변

2

아마도 힙 크기를 늘리면됩니다. 예 : 응용 프로그램을 시작하는 데 사용되는 java 명령에 -Xmx256m을 추가하십시오.

당신은 비행 접시가 완전히 확장 가능하지 않다는 당신의 추측에 아마 맞을 것입니다. 필자는 완전한 입력 XML과 완전한 대상 PDF 파일의 메모리 내 표현을 생성하고 사용하기를 기대합니다. (그렇게하는 것이 가장 쉬운 방법 일 것입니다.)

그러나 "매우 큰"PDF 파일은 사람들이 다운로드하여보고 문제를 일으킬 수 있기 때문에 확장 가능하지 않습니다. 따라서 여러 PDF 파일을 생성해야합니다.

+0

동의 ... 마술 알약이 있었으면 좋겠다! – pstanton

+0

@pstanton - 있습니다. '-Xmx' 옵션입니다 ... 또는 64 비트 JVM을 사용하고 많은 메모리를 구입하십시오. –

+0

예. 완전히 알고 있습니다 .. 제 의뢰인이 기억이 싸다는 말처럼 프로그래밍은 아닙니다! – pstanton