Jump to content
We've recently updated our Privacy Statement, available here ×

java.lang.OutOfMemoryError: Java heap space when re-format page before export


jmikel

Recommended Posts

Hi All,

Because my report has some contents that be spread page out. hence, I tried to re-format report before export it into pdf.

My code below:

JRVirtualizer virtualizer = new AJVirtualizer();        JRVirtualizationHelper.setThreadVirtualizer(virtualizer);        AJPersistenceManager pmgr = new AJPersistenceManager();        JasperPrint print = pmgr.readPrintFromFile(prtFileName, startPage, endPage);        AJLayout ajLayout = new AJLayout();        if(exporter instanceof AJPdfExporter || exporter instanceof AJRtfExporter)        {                try {                    print = ajLayout.spreadPageOut(print);                } catch (vqException e) {                    e.printStackTrace();                }                       }                                  exporter.setParameter(JRExporterParameter.JASPER_PRINT, print);        if(this.outputFile != "")        {            exporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, this.outputFile);        }        else        {            exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, this.ostream);        }        exporter.setParameter(JRExporterParameter.CHARACTER_ENCODING, contentEncoding);        exporter.setParameter(AJExporterParameter.REPORT_FILE_NAME,                dbFileName());[/code]

AJLayout.java

public class AJLayout {    private static final Log log = LogFactory.getLog(AJLayout.class);    private int pageWidth;    private int pageHeight;      private int leftPageMargin = 36;    private JasperPrint jp;       public AJLayout()    {}       public JasperPrint spreadPageOut(JasperPrint jasperPrint) throws vqException {        jp = new JasperPrint();        pageWidth = jasperPrint.getPageWidth();        pageHeight = jasperPrint.getPageHeight();        jp.setPageHeight(pageHeight);        jp.setPageWidth(pageWidth);        try        {            log.info("AJLayout: spreadPageOut");            for (int i = 0; i < jasperPrint.getPages().size(); i++) {                spreadPageOut(jasperPrint.getPages().get(i));                              }        }        catch (Exception ex)        {            log.error(ex);        }        return jp;    }         public void spreadPageOut(JRPrintPage page) {        boolean hasSpread = false;        boolean isAdded2NewPage = false;        List<JRPrintElement> elements = page.getElements();        int posSpreadX = 0;        JRBasePrintPage curPage = new JRBasePrintPage();        JRBasePrintPage spreadPage = null;        for (int i = 0; i < elements.size(); i++) {            isAdded2NewPage = false;            //JRPrintElement element = elements.get(i);                       int eWidth = elements.get(i).getWidth();            int eX = elements.get(i).getX();                       if (eWidth < pageWidth && ((eX + eWidth) > pageWidth)) {                JRPrintElement element = elements.get(i);                               if (!hasSpread) {                    hasSpread = true;                    posSpreadX = eX - leftPageMargin;                    if (spreadPage == null) {                        spreadPage = new JRBasePrintPage();                    }                }                element.setX(eX - posSpreadX);                spreadPage.addElement(element);                isAdded2NewPage = true;            } else {                curPage.addElement(elements.get(i));            }            if (isAdded2NewPage == false && (elements.get(i) instanceof JRTemplatePrintFrame)) {                JRTemplatePrintFrame returnedFrame = spreadPageOut((JRTemplatePrintFrame) elements.get(i), eX);                if (returnedFrame != null) {                    if (spreadPage == null) {                        spreadPage = new JRBasePrintPage();                    }                    spreadPage.addElement(returnedFrame);                }            }        }        jp.addPage(curPage);        if (spreadPage != null) {            spreadPageOut(spreadPage);        }    }          public JRTemplatePrintFrame spreadPageOut(JRTemplatePrintFrame frame, int posXOffset) {        boolean hasSpread = false;        boolean isAdded2NewFrame = false;        List<JRPrintElement> elements = frame.getElements();        int posSpreadX = 0;        JRTemplatePrintFrame spreadFrame = null;        int pageWidthBound = pageWidth - posXOffset;        for (int i = 0; i < elements.size(); i++) {            isAdded2NewFrame = false;            //JRPrintElement element = elements.get(i);                       int eWidth = frame.getElements().get(i).getWidth();            int eX = frame.getElements().get(i).getX();                       if (eWidth < pageWidth && ((eX + eWidth) > pageWidthBound)) {                               JRPrintElement element = elements.get(i);                               if (!hasSpread) {                    hasSpread = true;                    posSpreadX = eX;                    if (spreadFrame == null) {                        spreadFrame = new JRTemplatePrintFrame(new JRTemplateFrame(frame.getOrigin(), frame.getDefaultStyleProvider()));                        spreadFrame.setY(frame.getY());                        spreadFrame.setX(leftPageMargin);                    }                                   }                elements.remove(element);                i--;                element.setX(eX - posSpreadX);                spreadFrame.addElement(element);                isAdded2NewFrame = true;            }            if (isAdded2NewFrame == false && (elements.get(i) instanceof JRTemplatePrintFrame)) {                              JRTemplatePrintFrame returnedFrame;                              returnedFrame = spreadPageOut((JRTemplatePrintFrame) elements.get(i), posXOffset + eX);                               if (returnedFrame != null) {                    if (spreadFrame == null) {                        spreadFrame = new JRTemplatePrintFrame(new JRTemplateFrame(frame.getOrigin(), frame.getDefaultStyleProvider()));                        spreadFrame.setY(frame.getY());                        spreadFrame.setX(leftPageMargin);                    }                    spreadFrame.addElement(returnedFrame);                }                           }        }         return spreadFrame;    }  }[/code]

 

My code run sucessfully with a small report. But when i execute with huge-report (size > 2G). I got an error below:

[root@VSDEV-94-35 init.d]# Exception in thread "Thread-0" Exception in thread "pool-2-thread-2" Exception in thread "pool-2-thread-4" Exception in thread "RMI RenewClean-[192.168.94.35:57380]" java.lang.OutOfMemoryError: Java heap space        at java.io.ObjectInputStream$BlockDataInputStream.readUTFBody(Unknown Source)        at java.io.ObjectInputStream$BlockDataInputStream.readUTF(Unknown Source)        at java.io.ObjectInputStream.readUTF(Unknown Source)        at net.sf.jasperreports.engine.virtualization.StringSerializer.read(StringSerializer.java:61)        at net.sf.jasperreports.engine.virtualization.StringSerializer.read(StringSerializer.java:32)        at net.sf.jasperreports.engine.virtualization.VirtualizationInput.readJRObject(VirtualizationInput.java:137)        at net.sf.jasperreports.engine.virtualization.VirtualizationInput.readJRObject(VirtualizationInput.java:105)        at net.sf.jasperreports.engine.fill.JRTemplatePrintText.readVirtualized(JRTemplatePrintText.java:1038)        at net.sf.jasperreports.engine.virtualization.SerializableSerializer.read(SerializableSerializer.java:119)        at net.sf.jasperreports.engine.virtualization.SerializableSerializer.read(SerializableSerializer.java:35)        at net.sf.jasperreports.engine.virtualization.VirtualizationInput.readJRObject(VirtualizationInput.java:137)        at net.sf.jasperreports.engine.virtualization.VirtualizationInput.readJRObject(VirtualizationInput.java:105)        at net.sf.jasperreports.engine.fill.JRTemplatePrintFrame.readVirtualized(JRTemplatePrintFrame.java:158)        at net.sf.jasperreports.engine.virtualization.SerializableSerializer.read(SerializableSerializer.java:119)        at net.sf.jasperreports.engine.virtualization.SerializableSerializer.read(SerializableSerializer.java:35)        at net.sf.jasperreports.engine.virtualization.VirtualizationInput.readJRObject(VirtualizationInput.java:137)        at net.sf.jasperreports.engine.virtualization.VirtualizationInput.readJRObject(VirtualizationInput.java:105)        at net.sf.jasperreports.engine.fill.JRTemplatePrintFrame.readVirtualized(JRTemplatePrintFrame.java:158)        at net.sf.jasperreports.engine.virtualization.SerializableSerializer.read(SerializableSerializer.java:119)        at net.sf.jasperreports.engine.virtualization.SerializableSerializer.read(SerializableSerializer.java:35)        at net.sf.jasperreports.engine.virtualization.VirtualizationInput.readJRObject(VirtualizationInput.java:137)        at net.sf.jasperreports.engine.virtualization.VirtualizationInput.readJRObject(VirtualizationInput.java:105)        at net.sf.jasperreports.engine.base.VirtualElementsData.readVirtualized(VirtualElementsData.java:179)        at net.sf.jasperreports.engine.virtualization.SerializableSerializer.read(SerializableSerializer.java:119)        at net.sf.jasperreports.engine.virtualization.SerializableSerializer.read(SerializableSerializer.java:35)        at net.sf.jasperreports.engine.virtualization.VirtualizationInput.readJRObject(VirtualizationInput.java:137)        at net.sf.jasperreports.engine.virtualization.VirtualizationInput.readJRObject(VirtualizationInput.java:105)        at net.sf.jasperreports.engine.util.VirtualizationSerializer.readData(VirtualizationSerializer.java:135)        at net.sf.jasperreports.engine.util.SwapFileVirtualizerStore.retrieve(SwapFileVirtualizerStore.java:137)        at net.sf.jasperreports.engine.fill.StoreVirtualizer.pageIn(StoreVirtualizer.java:58)        at net.sf.jasperreports.engine.fill.JRAbstractLRUVirtualizer.requestData(JRAbstractLRUVirtualizer.java:521)        at net.sf.jasperreports.engine.base.ElementsBlock.ensureData(VirtualizableElementList.java:463)java.lang.OutOfMemoryError: Java heap space        at java.lang.Class.privateGetDeclaredFields(Unknown Source)        at java.lang.Class.getDeclaredField(Unknown Source)        at java.io.ObjectStreamClass.getDeclaredSUID(Unknown Source)        at java.io.ObjectStreamClass.access$700(Unknown Source)        at java.io.ObjectStreamClass$2.run(Unknown Source)        at java.io.ObjectStreamClass$2.run(Unknown Source)        at java.security.AccessController.doPrivileged(Native Method)        at java.io.ObjectStreamClass.<init>(Unknown Source)        at java.io.ObjectStreamClass.lookup(Unknown Source)        at java.io.ObjectOutputStream.writeObject0(Unknown Source)        at java.io.ObjectOutputStream.defaultWriteFields(Unknown Source)        at java.io.ObjectOutputStream.writeSerialData(Unknown Source)        at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)        at java.io.ObjectOutputStream.writeObject0(Unknown Source)        at java.io.ObjectOutputStream.defaultWriteFields(Unknown Source)        at java.io.ObjectOutputStream.writeSerialData(Unknown Source)        at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)        at java.io.ObjectOutputStream.writeObject0(Unknown Source)        at java.io.ObjectOutputStream.writeObject(Unknown Source)        at sun.rmi.transport.DGCImpl_Stub.dirty(Unknown Source)        at sun.rmi.transport.DGCClient$EndpointEntry.makeDirtyCall(Unknown Source)        at sun.rmi.transport.DGCClient$EndpointEntry.access$1600(Unknown Source)        at sun.rmi.transport.DGCClient$EndpointEntry$RenewCleanThread.run(Unknown Source)        at java.lang.Thread.run(Unknown Source)java.lang.OutOfMemoryError: Java heap space        at sun.nio.cs.ISO_8859_1.newEncoder(Unknown Source)        at java.lang.StringCoding$StringEncoder.<init>(Unknown Source)        at java.lang.StringCoding$StringEncoder.<init>(Unknown Source)        at java.lang.StringCoding.encode(Unknown Source)        at java.lang.String.getBytes(Unknown Source)        at java.io.UnixFileSystem.getBooleanAttributes0(Native Method)        at java.io.UnixFileSystem.getBooleanAttributes(Unknown Source)        at java.io.File.exists(Unknown Source)        at org.apache.log4j.helpers.FileWatchdog.checkAndConfigure(FileWatchdog.java:77)        at org.apache.log4j.helpers.FileWatchdog.run(FileWatchdog.java:108)java.lang.OutOfMemoryError: Java heap space        at sun.reflect.GeneratedConstructorAccessor14.newInstance(Unknown Source)        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)        at java.lang.reflect.Constructor.newInstance(Unknown Source)        at net.sf.jasperreports.engine.virtualization.SerializableSerializer.read(SerializableSerializer.java:111)        at net.sf.jasperreports.engine.virtualization.SerializableSerializer.read(SerializableSerializer.java:35)        at net.sf.jasperreports.engine.virtualization.VirtualizationInput.readJRObject(VirtualizationInput.java:137)        at net.sf.jasperreports.engine.virtualization.VirtualizationInput.readJRObject(VirtualizationInput.java:105)        at net.sf.jasperreports.engine.fill.JRTemplatePrintFrame.readVirtualized(JRTemplatePrintFrame.java:158)        at net.sf.jasperreports.engine.virtualization.SerializableSerializer.read(SerializableSerializer.java:119)        at net.sf.jasperreports.engine.virtualization.SerializableSerializer.read(SerializableSerializer.java:35)        at net.sf.jasperreports.engine.virtualization.VirtualizationInput.readJRObject(VirtualizationInput.java:137)        at net.sf.jasperreports.engine.virtualization.VirtualizationInput.readJRObject(VirtualizationInput.java:105)        at net.sf.jasperreports.engine.fill.JRTemplatePrintFrame.readVirtualized(JRTemplatePrintFrame.java:158)        at net.sf.jasperreports.engine.virtualization.SerializableSerializer.read(SerializableSerializer.java:119)        at net.sf.jasperreports.engine.virtualization.SerializableSerializer.read(SerializableSerializer.java:35)        at net.sf.jasperreports.engine.virtualization.VirtualizationInput.readJRObject(VirtualizationInput.java:137)        at net.sf.jasperreports.engine.virtualization.VirtualizationInput.readJRObject(VirtualizationInput.java:105)        at net.sf.jasperreports.engine.base.VirtualElementsData.readVirtualized(VirtualElementsData.java:179)        at net.sf.jasperreports.engine.virtualization.SerializableSerializer.read(SerializableSerializer.java:119)        at net.sf.jasperreports.engine.virtualization.SerializableSerializer.read(SerializableSerializer.java:35)        at net.sf.jasperreports.engine.virtualization.VirtualizationInput.readJRObject(VirtualizationInput.java:137)        at net.sf.jasperreports.engine.virtualization.VirtualizationInput.readJRObject(VirtualizationInput.java:105)        at net.sf.jasperreports.engine.util.VirtualizationSerializer.readData(VirtualizationSerializer.java:135)        at net.sf.jasperreports.engine.util.SwapFileVirtualizerStore.retrieve(SwapFileVirtualizerStore.java:137)        at net.sf.jasperreports.engine.fill.StoreVirtualizer.pageIn(StoreVirtualizer.java:58)        at net.sf.jasperreports.engine.fill.JRAbstractLRUVirtualizer.requestData(JRAbstractLRUVirtualizer.java:521)        at net.sf.jasperreports.engine.base.ElementsBlock.ensureData(VirtualizableElementList.java:463)        at net.sf.jasperreports.engine.base.ElementsBlock.ensureDataAndTouch(VirtualizableElementList.java:432)        at net.sf.jasperreports.engine.base.ElementsBlock.get(VirtualizableElementList.java:283)        at net.sf.jasperreports.engine.base.VirtualizableElementList.get(VirtualizableElementList.java:96)        at net.sf.jasperreports.engine.base.VirtualizableElementList.get(VirtualizableElementList.java:54)        at com.alu.vital.vq.jasper.exporter.AJLayout.spreadPageOut(AJLayout.java:66)[/code]

Please take a look and give to me your idea to fix this issue?

 

Thanks and best regards,

 

 

Link to comment
Share on other sites

  • Replies 0
  • Created
  • Last Reply

Top Posters In This Topic

Popular Days

Top Posters In This Topic

Popular Days

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...