Como esse é um tema bastante procurado, escrevi um novo post com maiores detalhes sobre virtualização: http://bit.ly/aJYhV9

Quando tentamos gerar relatórios muito grandes com o JasperReport / iReport, é muito comum que aconteça erro de estouro de memória: OutOfMemoryException: Java heap space

Para contornar esse problema, podemos “virtualizar” a geração do relatório utilizando um parâmetro pré-definido do jasperReports: REPORT_VIRTUALIZER

Com isso, ao invés do Jasper tentar preencher o relatório totalmente utilizando a memória, para somente depois liberá-la, ele “gerencia” a memória, gerando uma parte do relatório, e passando essa parte para um arquivo de cache, depois volta a gerar outra parte, e assim por diante, até o término da geração.

//Cria uma conexão com o banco
conexao = Conexao.getConexao()
 
//Cria um cache no  C:\tmp
JRFileVirtualizer fileVirtualizer = new JRFileVirtualizer(3, "c:\\tmp");
 
//Seta o parametro REPORT_VIRTUALIZER com o diretório onde será armazenado o cache
HashMap parametros = new HashMap();
parametros.put(JRParameter.REPORT_VIRTUALIZER, fileVirtualizer);
 
//Preenche o relatório
JasperFillManager.fillReportToFile("MeuRelatorio.jasper", parametros,conexao)

Com isso, by by OutOfMemoryException…