Destruir um JFrame

Boa noite, estou trabalhando em um projeto Java SE e me deparei com a seguinte situação.
Quando em mando abrir um JFrame tudo ocorre normal porém quando eu não preciso mais dele e dou um

frame.dispose();

que segundo a documentação serviria para liberar os recursos alocados pela janela, porém acho que isso
não esta acontecendo visto que ainda consigo ter acesso a referência deste objeto e exibir-lo novamente, via

for (Window window : Window.getWindows()) {
   window.setVisible(true);
}

A minha dúvida é quando eu faço uma chamada ao método dispose() o meu JFrame não deveria ser destruído?
Porque as referências aos meus JFrames abertos ficão em Window.getWindows()?

alguém?

Não. A única coisa que remove um JFrame completamente da memória é, além de dar o dispose(), remover todas as referências ao JFrame. Além de dar o dispose(), você removeu a variável que refencia o JFrame na janela que o abriu?

O dispose() apenas remove os recursos que o Java usa relacionados ao sistema operacional, ou seja, recursos que rodam fora da VM. Ele tem pouco impacto na memória consumida pelo Swing em si.

O Java ainda conserva a informação do JFrame para poder abri-lo novamente. Não olhei a fundo o método Window.getWindows(), mas creio que essa lista use WeakReferences ou SoftReferences para garantir que o JFrame será excluído caso não esteja sendo referenciado. O mesmo vale para métodos como Frame.getAllFrames().

Também não adianta ficar vigiando o memory manager do Windows. O JFrame é um objeto como outro qualquer e, portanto, utiliza o heap do Java, que é desalocado pelo garbage collector por critérios próprios. Essa memória fica reservada na VM para ser usada por outros objetos. Para saber a quantidade de memória realmente ocupada pelo heap da VM, utilize um profiler como o JVisualVM.