Pessoal, tenho o seguinte problema:
Contexto:
Tenho uma aplicação Java Web JSF + Hibernate atualmente com 134 classes mapeadas e 1525 atributos anotados - OK
Essa aplicação é dividida em módulos e cada módulo está agrupado em um .jar com classes de cada domínio de negócio (módulos).
Até ai tudo bem, tudo funcionando…
Estou migrando uma outra aplicação para essa mesma arquitetura, e criei um outro jar para essa aplicação.
Esse novo módulo agrupa um conjunto de 332 classes e 5127 atributos anotados. As classes foram criadas e anotadas e tudo certo.
Problema:
Agora tenho uma aplicação com 466 classes mapeadas, 6652 atributos anotados, sendo que 943 são relacionamentos OneToMany e 915 são coleções ManyToOne;
O volume de mapeamentos e anotações aumentou consideravelmente.
Isso está gerando um grande impacto, pois só para criar a SessionFactory tenho um consumo absurdo de memória pelo Hibernate.
A aplicação ficou muito mais lenta independente do volume de objetos manipulados, pois a memória está sendo ocupada toda pelo Hibernate.
Em momento algum essa memória é liberada pelo GC… só reiniciando o servidor de aplicação.
Pergunta:
Como faria para otimizar esse consumo de memória na inicialização ???
Obs 1: Esse consumo de memória independe da criação de qualquer instância de objeto. Ocorre simplesmente criando a SessionFactory pelo método annotationConfiguration.buildSessionFactory();
Obrigado !!!