dúvida sincera: como otimizar projetos java spring boot consumindo 500mb parados
Contexto
Tenho um MacBook com 16 GB de RAM e 256 GB de SSD.
No projeto em que estou trabalhando temos vários microsserviços utilizando Spring Boot, sendo que vários deles acessam o mesmo banco de dados.
O problema começa quando preciso subir vários microsserviços localmente ao mesmo tempo. Mesmo sem fazer nada de muito pesado, o consumo de memória começa a ficar alto rapidamente.
Já tentei algumas alternativas para diminuir o consumo de memória das aplicações.
Soluções que já tentei
A primeira foi limitar a memória da JVM utilizando:
-Xms200m -Xmx300m
Isso ajuda bastante a controlar o consumo de cada serviço, principalmente quando preciso executar vários microsserviços ao mesmo tempo.
Também percebi uma diferença considerável na forma como a aplicação é iniciada.
Quando executo diretamente o JAR, o consumo de memória é menor:
java -jar minha-aplicacao.jar
Porém, quando utilizo:
mvn spring-boot:run
o consumo aumenta. No meu caso, chega a ficar aproximadamente 200 MB maior por aplicação.
O problema é que o mvn spring-boot:run acaba sendo mais conveniente durante o desenvolvimento, principalmente por causa do fluxo de desenvolvimento do Spring Boot.
Por outro lado, quando altero o código, não tenho exatamente o mesmo comportamento de um hot reload completo. Então fico nesse dilema:
Menor consumo de memória: executar a aplicação diretamente.
Melhor experiência de desenvolvimento: utilizar o Maven/Spring Boot para executar a aplicação.
Como tenho vários microsserviços rodando simultaneamente, esses poucos centenas de MB acabam fazendo bastante diferença em uma máquina com apenas 16 GB de RAM.