Hola a todos, llevo un tiempo haciendo pruebas e investigando sobre cómo Swing gestiona la memoria, y quería saber hasta qué punto voy por buen camino o estoy nadando en la completa ignorancia.
Empiezo por la conclusión: la gestiona mal, muy mal. Hice un proyecto muy sencillo que sólo tenía un JFrame vacío. Con el Administrador de Tareas de Windows abierto, ejecuté el proyecto y, como es lógico, el uso de memoria creció. Hasta aquí nada raro. Pero al cerrar el programa el uso de memoria seguía "crecido". Volvía a abrir el proyecto y el uso de memoria volvía a crecer sobre el anterior, ya abultado de la ejecución de antes.
Repetí este proceso de ejecutar/cerrar muchas, muchas veces, y en el Administrador de Tareas terminé viendo varios gigas de memoria en uso. Con AWT también probé lo mismo y no tuve ese problema, hacía la liberación de forma correcta al cerrar el programa, así que sólo pude deducir que Swing no libera la memoria al terminar la ejecución, lo cual me pareció un aunténtico fail por parte de Sun/Oracle.
Me cuesta pensar que haya un fallo tan gordo en algo tan extendido como es la librería Swing, así que me pregunto si hice algo mal, a lo mejor no estaba finalizando bien el programa sino que sólo estaba ocultando la ventana, o algo por el estilo...
¿Existe de verdad ese fallo? ¿Alguien puede sacarme de dudas?