Чрезмерное использование вложенных отчетов может увеличить потребность в ресурсах для отчета. Каждый подотчет порождает свою собственную нить во время заполнения. Также, если вы используете классы скриптлетов или вспомогательные классы, убедитесь, что все ресурсы, которые они создают, должным образом очищены. Также убедитесь, что вы используете последнюю версию JR.
Одна нота. JR API включает в себя набор виртуализаторов. Когда отчет заполняется, весь заполненный отчет создается как объект (JasperPrint). В зависимости от количества страниц в отчете этот объект может быть довольно большим. Виртуализаторы можно настроить для записи в файловую систему при достижении заданного порогового значения страницы.
Обычно это уменьшает общее использование памяти, но увеличивает время заполнения. Составной частью может быть виртуализатор gzip, который вместо записи в файловую систему сжимает сгенерированные объекты с помощью gzip.
Вот FAQ по теме:
http://community.jaspersoft.com/wiki/support-large-reports
Пример, на который он ссылается, можно получить, загрузив исходный код JR.
http://sourceforge.net/project/showfiles.php?group_id=36382&package_id=28579
Из высокоуровневого представления, если вы запускаете этот отчет в приложении, вы можете создать экземпляр виртуализатора (вот интерфейс, в котором перечислены известные классы реализации):
http://jasperreports.sourceforge.net/api/net/sf/jasperreports/engine/JRVirtualizer.html
Тогда ссылка используется во время заполнения:
JRDataSource ds = new JREmptyDataSource(10);
JRFileVirtualizer virtualizer = new JRFileVirtualizer(2, "tmp");
JasperPrint jasperPrint = fillReport(fileName, ds, virtualizer);
Если вы находитесь в iReport, виртуализатор можно настроить в меню «Параметры» -> «Настройки».
Надеюсь, это полезно.
Люк