Boa tarde.
Qual a melhor forma de fechar um form usando Swing, sem deixar nada no garbage.
Há uma forma de administrar objetos na memória?
Gerenciamento do garbage collector
8 Respostas
Você pode solicitar à JVM a execução do gc pela JVM, mas não há garantias de que ela irá ocorrer (a JVM pode nem possuir um gc), embora na maioria dos casos (especialmente em JSE), o GarbageCollector execute quando solicitado.
EDIT: acho que não prestei muita atenção ao seu problema. Vamos lá: você pode fechar uma jframe através do método dispose(), se a defatult close operation for dispose_on_close. Neste caso, a janela deixará de existir e, caso não exista outra janela aberta, o programa será encerrado.
Diretamente não, mas pode usar algumas “artimanhas”, como atribuir null à referências para que os respectivos objetos seja eliminados.
seuForm..this.dispose();
tbm, o system.exit(0);
Mesmo assim não há como garantir que o GC irá ser chamado ao atribuir null as referências, ou seja, não há como controlar o GC, você pode até tentar diminuir o tempo entre uma chamada e outra, mas isso não te traz grandes beneficios em termos de performance.
Você está certo. Acabei me contradizendo…
Refazendo minha frase:
…como atribuir null à referências para que os respectivos objetos fiquem disponíveis para serem eliminados.
Cuidado, alguns objetos podem ficar de fora do ciclo do garbage collector.
Pessoal antes de mais nada muito obrigado pela força!
Estou tentando fechar um jInternalFrame através de um dispose(), mais o problema é que não estou conseguindo retirar este objeto da memória. Uma vez instanciado naum consigo mais retirar ele da memória. Alguém sabe se o Garbage Collector é a melhor ferramenta para estes casos e como utilizar esta ferramenta, já pesquisei muita coisa na net mais naum acho nd concreto.
meu código está +/- assim:
//MINHA CLASSE ONDE FAÇO A HERANÇA DO JINTERNALFRAME
public class IMalote extends JInternalFrame
//MINHA CLASSE ONDE INSTACIO ESTE OBJETO
private JDesktopPane dskPrincipal = null;
private IMalote getIMalote(){
if (iMalote == null){
iMalote = new IMalote();
iMalote.setVisible(true);
}
return iMalote;
public void actionPerformed(java.awt.event.ActionEvent e) { //EVENTO ONCLICK DO MENU ONDE EU CHAMO O JINTERNALFRAME
dskPrincipal.add(getIMalote());
}
Você não pode controlar quando o GC irá ser chamado, isso fica à cargo da JVM
Mesmo assim não há como garantir que o GC irá ser chamado ao atribuir null as referências, ou seja, não há como controlar o GC, você pode até tentar diminuir o tempo entre uma chamada e outra, mas isso não te traz grandes beneficios em termos de performance.
Se é isso que você está buscando