Se obliga a ejecutar el GC antes de que se genere OutOfMemoryError. Si la JVM implementa varias variedades de GC (como "concurrente" o "parcial"), se ejecutará una GC antes de que la JVM se rinda, por lo que se han realizado todos los esfuerzos posibles para evitar el error.
La excepción que se cita es que si el GC se ejecuta repetidamente y solo recupera una cantidad minúscula de almacenamiento (y el tamaño del almacenamiento dinámico no se puede expandir) arrojará la toalla en lugar de seguir funcionando en modo "rastreo" . En teoría, para este caso, aumentar ligeramente el tamaño del montón permitiría que una aplicación "buena" se ejecute bien, pero una aplicación que está masticando poco a poco (lo que no es inusual) no se beneficiaría de un ligero aumento del montón, y encontraría el misma falla solo un poco más tarde.
[Se debe observar que en los casos en GC está funcionando con demasiada frecuencia crecientes el tamaño del montón puede reducir significativamente overhead GC, si la aplicación se comporta bien y simplemente por casualidad pasa a estar funcionando cerca del límite del montón . (Por supuesto, aumentar el tamaño del almacenamiento dinámico a una RAM mayor que la habitual generalmente hará que la aplicación funcione más despacio.)]
Niza pregunta, pero que yo sepa no hay ninguna manera se puede speedup GC mediante el establecimiento de los parámetros, excepto que marca su referencia a nula en el código. – kosa