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…