Dúvida sobre System.gc()

Sei que é um tópico muito discutido aqui mas recentemente entrei em um projeto que já está em produção, é um sistema que roda uma Thread responsável pela leitura biométrica, ele pega o buffer que vem do leitor biométrico e compara com o buffer armazenado no banco de dados, esse processo fica dentro de um laço infinito, pois é um sistema de registro de ponto, então a Thread precisa está sempre em execução, o sistema fica aberto o dia inteiro. Reparei um grande consumo de memória RAM que ao logo do dia faz o sistema ficar muito lento, usei o System.gc() para evitar isso e o problema foi resolvido, como vi em alguns tópicos alguns membros da comunidade repudiando o uso do System.gc() queria saber se nessa ocasião o uso desse recurso é válido.

https://docs.oracle.com/javase/7/docs/api/java/lang/System.html
Vê se te atende

Cara,
na especificação, chamar o gc é só uma indicação, o gc não tem obrigação de passar na hora que você pediu, então por isso não é recomendado usar ele.

Já vi pessoas com problemas de criar muitos objetos e o gc não dar conta, nesses casos vi que as pessoas mudaram o algoritmo de gc na JVM para ter mais performance.

2 curtidas

Ola @Samuelsonbrito, como o amigo @LincolnStuart falou abaixo não existe garantias de que ira rodar uma invocação ao System.gc(), sei que o problema aparentemente foi resolvido mas não é nenhuma garantia e bem provável que uma hora volte a ocorrer, mudar o algorithm da JVM acredito ser possivel sómente trocando a versão do Java, a Thread em si não deveria deixar o sistema lento, eu acredito que o alto consumo de memória ram se deve ao fato dos escopos das variáveis não estarem bem definidos, eu faria uma investigação no código e olharia quais são os recursos que não estão sendo liberados após o processamento.

2 curtidas