1
resposta

Como economizar mais espaço em memória?

Um dos diferenciais de um servidor de aplicações, em comparação com um servlet container, é que o servidor de aplicações também possui um EJB container, no qual todo session bean será instanciado.

Seguindo esse princípio, de imediato já podemos entender utilizar um servidor de aplicações resultará em um consumo maior de memória, em comparação com a utilização de um servlet container.

Em termos práticos, ao utilizar apenas um servlet container com CDI, um service não precisaria ser um EJB, e assim não precisaria ser instanciado pelo EJB container.

Em aplicações pequenas, e com poucos usuários, talvez a diferença de performance não seja muito percebida. Porém, ao mudarmos o cenário para um ERP com algo em torno de 150 DAOs, e cada DAO possuindo um respectivo Service, então temos 300 classes sendo classificadas como session beans, e necessitando serem instanciadas também pelo EJB container.

Levando-se em consideração esse cenário, e levando-se em consideração que o garbage collector tem uma certa demora para liberar instâncias não utilizadas da memória, o que se pode fazer para economizar mais memória ao utilizar o WildFly?

1 resposta

Olá, Everton. Tudo certo? Nós conseguimos limitar o número de instâncias que serão criadas, definindo no pool de instâncias. Nós falamos sobre ele na aula 2, quando há a explicação sobre o EJB Stateless. Basicamente o que vai acontecer é que quando uma instância for criada, após o uso, ela voltará para um pool que poderá devolver para outra requisição quando for solicitada. Caso todas as instâncias estejam ocupadas, uma próxima requisição "aguardará" um tempo (definido no pool de instâncias também). Caso uma instância não esteja pronta após este tempo, uma exceção ocorrerá para o usuário. Essa é uma maneira de evitar que haja um aumento descontrolado no uso da memória do servidor =)