Tenho um relatório com 5 subreports , quando o conteúdo de cada subreports é pequeno o relatório sai sem erros, mas quando o conteúdo dos subreports é grande ocorre este erro “ava.lang.OutOfMemoryError: Java heap space”.
Alguém sabe como solucionar este problema?
Isso deve ocorrer porque seus relatórios provavelmente são relativamente grandes. Num mapeamento objeto-relacional, se você compuser todos os objetos completos, imagina um objeto que carrega uma lista de objetos, que carrega outra lista de objetos, que carrega mais 3 listas de objetos… e assim vai, até estourar o Heap.
Ai vc pode tentar um System.gc() a cada final de laço sempre que possível (leia um pouquinho sobre coleta de lixo no java)… da uma lidinha nesse artigo também:
Se não der certo mesmo assim, ai voce terá que segmentar sua coleta de dados.
abraço!
bethinha
Olá Gibaholms!
obrigada pela ajuda, mas não entendi onde posso estar utlizando o “System.gc()”.
pode me ajudar novamente?
Abraços!
gibaholms
use sempre antes de hidratar um objeto… depois que imprimir esse objeto no relatorio, seta ele como null, chama o System.gc() novamente e depois hidrata outro.
R
rflprp
Veja quanto de memória está reservada sua JVM… se puder aumentar… aumente-a.
[]´s
ViniGodoy
Algumas dicas:
Use um profiler para se alguma classe de negócio sua não está criando objetos desnecessariamente. Também veja se não há como, após usar parte dos dados, descarta-los;
Tente usar a técnica de lazy-loading em listas de objetos, se seu mapeamento não fizer isso para você. Assim você evita carrega-las desnecessariamente;
Por padrão, a VM está autorizada a usar apenas 64mb. Você pode alterar a inicialização da VM. Por exemplo, para deixar a aplicação usar 200MB faça:
start javaw -Xmx200m -jar seuJar.jar
bethinha
Pessoal , obrigada pela ajuda, mas agora está ocorrendo um novo erro “Subreport overflowed on a band that does not support overflow” !!!
coloquei o subrelatório , no columnfooter, no pagefooter, o scriptlet está desabilitado, Ordem de Impressão está como Vertical, já não sei mais o que alterar,