Hola:
El abrir ventanas puedes fastidiar si no se hace bien. Procura reaprovechar las ventanas, no hagas new cada vez que quieras abrir una.
Las ventanas que quieres que realmente se liberen, llama al método dispose() de dicha ventana. No estaría de más que en dichas ventanas redefinas el método finalize() y pongas un System.out para verificar que efectivamente el recolector de basura las está librerando.
El problema puede no ser sólo de las ventanas. Si usas java 5, en el directorio bin tienes una aplicación que se llama
jconsole. Esta se enchufa a otra aplicacion java que esté corriendo y puedes visualizar su consumo de memoria y demás. Ahí podrás ver si se están creando muchos objetos sin liberar, etc, etc.
Se bueno.