Eu estruturei um programa de um jeito que quando ele abre uma nova tela, para configuração, etc… Ele cria um novo objeto Jframe, e apenas seta a visibilidade da tela atual para “false”. Porém, eu tenho a impressão de que ele não perde a tela que ele fechou, e ela fica na memória. Eu até tentei mudar a visibilidade pra “true”, reaproveitando alguma tela antiga, mas quando eu faço isso, ela fica toda bugada, com os botões todos tortos e errados. Por isso que eu crio uma nova e esqueço essa. Mas tem alguma forma de “apagar totalmente um objeto da memória manualmente” para liberar ram? Tipo um: tela.destroy();, sei lá
O garbage collector
se encarrega de excluir da memória os objectos não referenciados.
Se simplesmente alteras a visibilidade para false
, o teu objecto continua referenciado e sim, continua em memória. Para ficara elegível para destruição pelo garbage collector
deves colocar a null
que brevemente será eliminada da memória.
tela = null;
Sim, seu JFrame ainda existe.
O ideal, antes de apontar a referência que aponta para ele como null
, igual ao @pmlm disse, é também:
No construtor do seu JFrame:
setDefaultCloseOperation( JFrame.DISPOSE_ON_CLOSE );
Isso fará que quando for fechado, os recursos atrelados a ele serão liberados e ele será destruído.
Para criar um novo, vc precisará construí-lo novamente. Se precisar, por algum motivo, fechá-lo, dentro ou fora dele, vc deve usar o método dispose()
ao invés do setVisible( false )
.