Gerenciamento do garbage collector

8 respostas
amoreiraedu

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?

8 Respostas

davidtiagoconceicao

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.

Jauns
seuForm..this.dispose();

tbm, o system.exit(0);

davidtiagoconceicao

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.

peczenyj

Cuidado, alguns objetos podem ficar de fora do ciclo do garbage collector.

amoreiraedu

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());

}
sergio_ferraz

Você não pode controlar quando o GC irá ser chamado, isso fica à cargo da JVM

sergio_ferraz

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.

sergio_ferraz

Se é isso que você está buscando

Criado 5 de fevereiro de 2009
Ultima resposta 6 de fev. de 2009
Respostas 8
Participantes 5