Hay mucho que decir al tomarse el tiempo para probar las distintas configuraciones de recolección de basura, pero como se mencionó anteriormente, generalmente no es útil hacerlo.
Actualmente estoy trabajando en un proyecto que involucra un entorno con memoria limitada y una cantidad relativamente grande de datos; hay algunos datos grandes que llevan mi entorno al límite, y aunque pude reducir el uso de la memoria, que en teoría debería funcionar bien, todavía obtendría errores de espacio de pila --- las opciones detalladas de GC me mostraron que estaba tratando de recolectar basura, pero fue en vano. En el depurador, podría ejecutar System.gc () y seguro que habría "mucha" memoria disponible ... no mucha más, pero suficiente.
En consecuencia, la única vez que mi aplicación llama a System.gc () es cuando está a punto de ingresar el segmento de código donde se asignarán los grandes búferes necesarios para procesar los datos, y una prueba en la memoria libre disponible indica que no estoy garantizado para tenerlo. En particular, estoy viendo un entorno de 1 GB donde al menos 300 MB están ocupados por datos estáticos, y la mayor parte de los datos no estáticos están relacionados con la ejecución, excepto cuando los datos que se procesan tienen al menos 100-200 MB en la fuente. Todo es parte de un proceso de conversión automática de datos, por lo que todos los datos existen durante períodos de tiempo relativamente cortos a largo plazo.
Desafortunadamente, aunque se dispone de información sobre las diversas opciones para ajustar el recolector de basura, parece en gran medida un proceso experimental y los detalles de nivel inferior necesarios para comprender cómo manejar estas situaciones específicas no se obtienen fácilmente.
Dicho todo esto, a pesar de que estoy usando System.gc (), seguí sintonizando el uso de parámetros de línea de comando y logré mejorar el tiempo de procesamiento general de mi aplicación en una cantidad relativamente significativa, a pesar de no poder superar el obstáculo que plantea trabajar con los bloques de datos más grandes. Dicho esto, System.gc () es una herramienta ... una herramienta muy poco confiable, y si no tiene cuidado con la forma en que la usa, deseará que no funcione la mayoría de las veces.