Bom dia pessoal,
Estou tendo problemas de memoria durante a utilização do TreeNode do primefaces e gostaria de auxilio para solução.
Passei algumas semanas já buscando a origem do memory leak, imaginava que estava no algorítimo gerador do tree que utiliza recursividade em cima de hashMaps, porem depois de muito estudo em cima verifiquei que o problema não estava no algorítimo e sim na utilização do TreeNode.
No código abaixo a variável nodoPai, que é utilizada pelo componente do primefaces para geração do TreeView não é finalizada quando o usuário fecha a aba do browser ou fecha o browser, enfim… e isso faz com que o GC identifique a variável como tendo ainda uma instancia dentro da aplicação, assim a variável que ocupa em media 150mb de memoria fica em memoria para sempre.
Se alguém tiver alguma opinião do que devo fazer agradeço…
[code] private TreeNode nodoPai;
private List<Leiaute> leiautes;
@Override
public String pesquisa() {
mapEscrituracao = ((IAppFacade)getServiceFacade()).recuperaEscrituracao(context, (EscrituracaoDTO)entidadePlc, null, null);
List<LeiauteBaseEntity> root = new ArrayList<LeiauteBaseEntity>();
for(LinkedHashMap<Long, LeiauteBaseEntity> desc : mapEscrituracao.values()){
if(desc.values() != null){
Class classeAnterior = Object.class;
for (LeiauteBaseEntity entidadeRoot : desc.values()) {
if(!classeAnterior.equals(entidadeRoot.getClass())){
entidadeRoot.setMostraColunas(Boolean.TRUE);
}
classeAnterior = entidadeRoot.getClass();
}
}
root.addAll(desc.values());
//Popula os dados nas colunas
GenericsEntityUtils.populaDadosColunasEntidade(root);
}
//Monta a arvore para exibicao
nodoPai = new AuditorTreeNode("Root", null);
montaArvorePaiRecursivo(nodoPai, root);
return pesquisaApos();
}[/code]