Forzar el uso de garbage collector
Buen día,
Tengo una aplicación web que es demasiado lenta cuando existen muchos usuarios conectados.
Monitoreo el rendimiento de la aplicación por medio de VisualVM y la misma usa casi el 100% del head
Así que deseo utilizar el garbage collector para poder limpiar la memoria.
Investigando en internet encontré que forzar el garbage collector(GC) es una mala práctica y quisiera saber si existe algún riesgo al forzar el GC.
Saludos
- Inicie sesión o regístrese para enviar comentarios
Visual VM
Sería mejor idea monitorear qué procesos son pesados/problemáticos y refactorizarlos, o bien ya en otros términos hacer un balanceo de cargas con réplicas de tu aplicación en otro servidor.
Tu no mandas al GC
Es una mala práctica, lo es, pero tú no controlas el GC , el como funciona es que tú le mandas una petición a la JVM para que corra el GC , pero no quiere decir que lo va a hacer cuando tú se lo pidas, puedes usarlo para ganar tiempo mientras encuentran el verdadero problema.
consumes mas recursos y en
consumes mas recursos y en general es una muy mala práctica, otra recomendación sería checar los objetos que deben cerrarse, que estos se cierren correctamente en un finally (al menos) y también puedes usar jconsole (esta mejor la visusl vm) y cheques que onda
Conjunto de datos vivos
Si la aplicación está lenta puede deberse a un número de cosas; si el heap está al 100% debería morirse tu jvm con un OOME; como menciona Jesús, invocar System.gc() sólo es una sugerencia; y si el heap está arriba de 90% te aseguro que ya se invocó un Full Garbage Collection, así que no te sirve de nada.
en esta platica hablé de como funciona el Garbage Collector
Mejores practicas
Tal vez sea mejor refactorizar tu codigo; y/o realizar lo que dice skuarch
Es una buena practica; como dicen los comentarios anteriores; el echo de llamar al GC no quiere decir que se ejecute de manera inmediata sino se que pone en la pila de procesos a ejecutar para la JVM; pero ésta solo la ejecuta cuando debe de hacerlo (por que el GC es de baja prioridad).
Recuerda que cuando corre el GC solo recoge y elimina los recursos que no se usan o que no tienen referencias en el Stack.