Bom dia pessoal
Tenho um problemão aqui, cada janela q abro ocupa memória e não desocupa quando fecho. mesmo usando super.dispose(). Alguém já teve esse problema ? Alguém tem idéia de uma solução ?
Bom dia pessoal
Tenho um problemão aqui, cada janela q abro ocupa memória e não desocupa quando fecho. mesmo usando super.dispose(). Alguém já teve esse problema ? Alguém tem idéia de uma solução ?
Vc tem que dixa-las sem referencia para que o garbage collector (pesquise sobre isso) possa retira-las da memória.
Ex: ClientView clientView = new ClientView(); clientView = null;
flws
Sim, já estou fazendo isso, mas ainda tenho o mesmo problema.
if (m_APanel != null)
m_APanel.dispose();
m_APanel = null;
this.removeAll();
super.dispose();
Então…o dispose se não me engano faz com que os recursos internos do objeto fiquem disponíveis para o gc, ainda assim atribuiria null para o objeto “pai” assim: m_APanel = null;
Outro detalhe é que o gc não retira os objetos imediatamente da memória.
Mas que situação é essa sua que a memória ficou reduzida a ponto de ter que destruir as janelas por completo? Na maioria das vezes é o contrario; mante-las ajuda na performance da aplicação na parte visual.
flws
Pois é, o problema é bem esse, performance.
A medida que o sistema vai sendo utilizado, durante o dia, vai ficando cada vez mais lento.
Notei que a memória utilizada do arquivo de paginação do windows, aumenta quando abro a janela e não diminui quando fecho a mesma, somente quando fecho o sistema todo.
Notei também que se eu abro (apenas abro) outro projeto dentro do eclipse e depois fecho esse projeto, acontece o mesmo com o arquivo de paginação. Estou achando que meu problema é com Rwindows mesmo.
Meu sistema está tão grande que para não ter erro de OUT of memory, eu preciso incluir como argumento na Vm a expressão -Xms32m -Xmx256m, não sei se isso tem alguma influência na paginação.
Enfim, não sei o que fazer.
Opa… eae povo !
Estou com um problema parecido! E ta dificil de resolver…
Tenho um sistema principal que abre uma série de subframes… e a cada nova frame um alocação de memória, quando fecho a frame, seto null na variavel para avisar o gb… Mesmo depois de um tempo, a memória continua alocada… então chamei o velho System.gc() após o null… e nada…
Sei que a execução do gb não pode programada ou mesmo que executada não podemos garantir que isso seja feito com eficiêcia pois depende da JVM (no meu caso a 1.4) e tb do sistema operacional (no meu Windows XP Professional SP2)…
Vou fazer uns testes aki e se descobrir algo aviso vcs…
Fui !
Opa…
Descobri algo aki…
Eh o seguinte… fiz alguns testes… crei um JFrame e coloquei ele para chamar outros subframes…
A cada novo frame (com uma JTable ja populada) ocorria uma alocação de ± 4Mb.
Bom… comecei com 768, só de abrir a aplicação pulou para 794, e fui abrindo subframes até alocar ± 812.
Ai comecei a fechar os subframe, chamando o dispose nativo de cada um… como não guardei a referência em lugar algum elas ficavam a merce do GC… ^^
Após fechar todas e ficar só com a primeira a alocação continuou a mesma… ± 814. Logo em seguida executei o GC… e nada… os mesmos 814.
Fui tomar um café, e na volta continuava com os 814… então executei o GC novamente e… caiu para os mesmos 794 iniciais…
Agora… preciso ver se isso ocorreria uatomaticamente após uns 3 cafézinhos… ^^
Ou se é mesmo necessário uma intervenção na programação… ^^
Povo… uma pergunta…
Todos sabem que a execução do GB eh feita pela JVM do SO, ou seja, dependente muito de como ela foi implementada para aquele o SO usado…
Com o jre1.4, a a locação de memória fica cada vez maior… e mesmo após um grande período de uso do sitema o GB não reduz a alocação de memória…
Alguem sabe se nas JVM’s isso não ocorre mais ??? E se isso eh mesmo algum problema da jre 1.4 ou eu que estou pecando em algum lugar no código ?!?
Vlw
Os Garbage Collectors das JVMs atuais estão muito avançados. Se você tem problemas de OutOfMemory, é mais provável que esteja com algum leak no seu código… você até pode dar uma olhada nos vários tipos de GCs disponíveis e testar com eles, mas sugiro que pegue direto um profiler e dê uma olhada no que está ficando na memória.
O dificil vai ser arrumar tempo para instalar as VM testar em cada uma delas… =/
Bom… vou ver se arrumo um programinha que mostre o conteudo da memória (algum profiler) como vc citou…
Assim posso ter certeza dos objetos que estão ficando por mais tempo alocados…
Se vcs souberem algum para indicar… ^^
Vlw !!
MarceloS,
Muito bom esse software hein… vi que ele vem nativo no java 1.6
Bacana… ainda to vendo como funciona… mas acredito que ele irá me ajudar a identificar o problema de memória… ^^
Vlw !