Swing: como ter certeza q um JInternalFrame nao esta sendo usado por + nenhuma class?

3 respostas
shinoob

Depois de mta pesquisa … e testes, cheguei a conclusao que java é um poquim + pesado que outro programa compilado em Delphi, C# ou outra coisa q gera codigo nativo …

Porem acho q com um poukinho de logica da pra deixa ele usando um pouco menos de memoria

ai que entra o lance …

eu tenho uma class MainCtrl … que chama outras Ctrl’s , que gerenciam as View

uma tentativa de fazer MVC em Swing

ai eu chamo a View

setGerenciaView((GerenciaView) Class.forName(getGerenciaViewClass()).newInstance());
getMainView().getPnlContent().add(getGerenciaView());
getGerenciaView().initShowGUI(this);

na criacao dessa view eu seto o DefaultCloseOperation

setDefaultCloseOperation(JInternalFrame.DISPOSE_ON_CLOSE);

mas qdo eu crio ele de novo … essa classe nao é “liberada”

eu to usando o YourKit Profiler pra visualizar as classes em memoria

ai, eu pensei … deve ser que ainda esta sendo usada por alguem …
pensando nisso eu fiz o seguinte …

if (getGerenciaView() != null)
            {
                if (getGerenciaView().isVisible())
                {
                    getGerenciaView().toFront();
                    return;
                }
                else
                {
                    getMainView().getPnlContent().remove(getGerenciaView());

                    setGerenciaView(null);
                }
            }
            
            setGerenciaView((GerenciaView) Class.forName(getGerenciaViewClass()).newInstance());
            getMainView().getPnlContent().add(getGerenciaView());
            getGerenciaView().initShowGUI(this);

resumindo … continua a classes la, e num some … mesmo eu removendo ela do Desktop, e setando null pra class Ctrl , q cria ela …

tem como eu descobrir … quem é q ainda esta usando essa class??? pra que o GC limpe ela da memoria?
ou intaum … se alguem ai tiver uma solucao pra app Swing MDI … estou aberto a ideias

3 Respostas

berg.pb

o melhor, nesse caso, na minha opiniao, é vc utilizar a função dispose(), que nao somente libera a memória, mas deixa ‘destroi’ o componente.
saí, se vc quiser usá-lo de nov, dá um novo new.

shinoob

eu tentei isso tb mas continua mostrando que tem + de uma class

sera que pode ser o Profiler?

eu testei tb com o Profiler do NetBeans, mas tb naum deu certo

agora to testando outro , JProfiler … vamos ver o q vira

shinoob

bom … o JProfiler tem uma opcao , RUN GC … e qdo eu rodava isso , ele sumia com as class
parece q esta td certo :smiley:

Criado 10 de fevereiro de 2009
Ultima resposta 10 de fev. de 2009
Respostas 3
Participantes 2