¿De qué versión de Java estamos hablando aquí? En 6, nunca lo llamaría explícitamente. Como regla general, el recolector de basura es lo suficientemente bueno para saber cuándo es mejor limpiar los recursos y tiene suficientes opciones de VM configurables. Ciertamente nunca sentí la necesidad de llamarlo en código, y yo diría que a menos que estuvieras haciendo algo realmente extraño (o mostrando el uso de recursos) es mejor no hacerlo. Si siente la necesidad de llamarlo, diría que ha hecho algo malo o incorrecto en otro lado.
Si estamos hablando de trabajar con Java 1.4 o antes, a veces me parece que necesita ayuda. No hay ejemplos a mano (lo siento), pero recuerdo haber necesitado darle una pista para evitar un retraso horrible cuando finalmente decidió entrar en acción. Con el mismo código en 6, el problema desapareció y llamarlo no influyó en nada.
Por supuesto, cuando llama al System.gc()
, todo lo que hace es sugerirle a la VM que ahora podría ser un buen momento para ejecutar el recolector de elementos no utilizados. No significa que realmente lo hará, es simplemente una sugerencia de que una implementación de MV perfectamente válida podría ignorar por completo. De hecho hay incluso una opción DisableExplicitGC que significan estas llamadas definitivamente no tendrá efecto (y porciones de código en entornos de producción se ejecuta con esta opción.)
Así que sí, se sigue utilizando en código - pero el la gran mayoría de las veces no es una buena práctica en absoluto.
Sí. Eso es lo que sugirió HFJ. Pero no estaba realmente convencido de su respuesta. –