Hi, I am experiencing OutOfMemoryErrors when generating very large reports (XLS with more than 56000 records). There was a problem in my code, the resultset was retrieving all the database records in memory without fetching. I have corrected this problem. But the OutOfMemoryError now occurs during the export. I have try virtualizer after reading this http://www.jasperforge.org/index.php?option=com_content&task=view&id=250&Itemid=5 My code is below. I have created a virtualizer and added it the the parameters but I think it is never called (no files in my temp dir and OutOfMemoryError before an xls file is generated). Code:JRFileVirtualizer virtualizer = new JRFileVirtualizer( 2, Configuration.getParameter("report.virtualizer.physical.temp.path"«») ); parameters.put( JRParameter.REPORT_VIRTUALIZER, virtualizer ); DataSource dataSource = new DataSource( parameters, jasperReport.getQuery().getText(), connection ); JasperPrint jasperPrint = JasperFillManager.fillReport( jasperReport, parameters, dataSource ); //----------------------------------------------------- JRXlsExporter exporterXLS = new JRXlsExporter(); exporterXLS.setParameter( JRXlsExporterParameter.JASPER_PRINT, jasperPrint ); //exporterXLS.setParameter( JRXlsExporterParameter.OUTPUT_STREAM, output ); exporterXLS.setParameter( JRXlsExporterParameter.OUTPUT_FILE_NAME, PDFReportCreator.BASE_PATH_FOR_PDF + report.getPdfFilePath() ); exporterXLS.setParameter( JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET, Boolean.TRUE ); exporterXLS.setParameter( JRXlsExporterParameter.IS_AUTO_DETECT_CELL_TYPE, Boolean.FALSE ); exporterXLS.setParameter( JRXlsExporterParameter.IS_WHITE_PAGE_BACKGROUND, Boolean.FALSE ); exporterXLS.setParameter( JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS, Boolean.TRUE ); exporterXLS.exportReport(); The exportReport method never ends... Code:[code]/** * */ package com.dotbase.jasper.model; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.Map; import java.util.Set; import net.sf.jasperreports.engine.JRDataSource; import net.sf.jasperreports.engine.JRException; import net.sf.jasperreports.engine.JRField; /** * @author lrobert * Dataset pour la virtualisation (traîtement de gros rapports) */ public class DataSource implements JRDataSource { private static final int MAX_RESULT_PER_PAGE = 1000; private String query; private Connection connection; private ResultSet rsReportData; private int currentPage = 0; public DataSource( Map<String, Object> parameters, String query, Connection connection ) throws SQLException { //exécuter la requête connection.setAutoCommit( false ); PreparedStatement statement = connection.prepareStatement( query ); statement.setFetchSize( 100 ); this.rsReportData = Database.executeSelect( statement ); } public Object getFieldValue( JRField jrField ) throws JRException { try { Object field = rsReportData.getObject( jrField.getName() ); return field; } catch( SQLException e ) { throw new JRException( e ); } } private int iNext = 0; public boolean next() throws JRException { try { return rsReportData.next(); } catch( SQLException e ) { throw new JRException( e ); } } } Could somebody help me to solve that ? How could I be sure my virtualizer is used ? What does the first parameter of the virtualizer ("maxsize") mean ? Thank you for your help