Existe uma diferença entre show() e setVisible(true): um deles é deprecated (e faz tempo). Isso pq eles deixaram os componentes mais Bean-like, então vc lembra que se vc tá setando uma propriedade de um JComponent, vc deve gerar PropertyChangeEvents, e tem que prestar atenção em qual thread tá fazendo isso.
Os componentes Swing são lightweight, isto é, eles se desenham. Mas na AWT, existe uma correspondência entre um componente e algum recurso do SO, nem que seja um window handle.
O método dispose() libera esses recursos. Então, se vc não vai mais usar o JFrame, chame dispose() nele, e tenha certeza de que ele está livre pra coleta, assim ele será coletado assim que possível e pára de receber eventos do SO.
90% das vezes vc não vai notar diferença de performance nenhuma… mas saber que tá tudo bonitinho dentro é legal.
[]s