Objetos

Ae…

Queria saber se eu consigo remover objetos criados na memória em tempo de execução? E alguém sabe o tamanho de um ArrayList ou é “ilimitado”?

abçs…

Como remover eu não sei não, mas ArrayList é ilimitado sim

abras

se nao estou equivocado somente o coletor de lixo pode remover objetos na memoria, vc pode influenciar ele executar para limpar mas nada garantido q ele seja executado, somente a jvm que decide isso…

Exactamente, em java tens remoção automatizada de objectos não utilizados. Quem faz isto é o garbadge collector (GC)… a qualquer momento no teu programa podes chamar o colector de lixo:

System.gc();

O ArrayList é ilimado à quantidade de memória disponível :stuck_out_tongue:

[quote=SrFabio]Exactamente, em java tens remoção automatizada de objectos não utilizados. Quem faz isto é o garbadge collector (GC)… a qualquer momento no teu programa podes chamar o colector de lixo:

System.gc();


[/quote]

Voce pode apenas requerir uma chamada ao System.gc(), mas eh a JVM quem via decidir se vai ou nao aciona-lo.
Ou, estou errado?

Abracos

Penso que não estás correcto, esse método chama mesmo o GC…ele começa a trabalhar normalmente…se encontrar objectos inúteis remove-os, senão não faz nada(apenas a revisão). Usar esse método é como forçar o gc a trabalhar.

Está certo, mas na grande maioria dos casos mesmo isso é irrelevante.

Uma forma de ajudar a jvm a saber que já pode retirar o objeto da memória, é jogando null para todas as referencias dela.

[quote=renatocustodio]Está certo, mas na grande maioria dos casos mesmo isso é irrelevante.

Uma forma de ajudar a jvm a saber que já pode retirar o objeto da memória, é jogando null para todas as referencias dela.[/quote]

Boa dica :slight_smile: Por acaso nunca me lembrei de fazer isso eheh.

é verdade o uso do null realmente é uma boa qdo o coletor de lixo passar!

Blz? Então, testei o método gc(); funcionou, mas no meu caso não ajudou, pois estou fazendo uma busca de estados por profundidade, e preciso gerar muitos estados até encontrar a solução, por isso a minha dúvida, mas quando uso o gc ele percorre mais estados, mas acaba percorrendo estados repetidos pois acredito que tenham sido removidos da memória e na hora de comparar, não existe.

… ah, e outra coisa, vcs acham ruim eu criar um novo objeto da classe para cada estado?

Vou continuar tentando aqui… se alguém souber de alguma coisa da um help ae vlws!

abçs

  1. O System.gc() realmente pede a VM para rodar o garbage collector. Mas a decisão final é dela. Na prática, só vi ela ignorar chamadas como essa se forem feitas dentro de um loop, de maneira muito rápida;
  2. Só serão coletados objetos que não estejam sendo mais referenciados, o que não é o caso da sua árvore de estados. Se você tem estados demais, considere a possibilidade de usar lazy-loading nos nós e de descarregar totalmente nós ja visitados. A busca em profundidade é simplista demais, o que permite descarregar braços inteiros da árvore visitada sem maiores problemas;
  3. Outra opção é limitar a profundidade da busca para menos níveis.

O que você está implementando?

[quote=ViniGodoy]1. O System.gc() realmente pede a VM para rodar o garbage collector. Mas a decisão final é dela. Na prática, só vi ela ignorar chamadas como essa se forem feitas dentro de um loop, de maneira muito rápida;
2. Só serão coletados objetos que não estejam sendo mais referenciados, o que não é o caso da sua árvore de estados. Se você tem estados demais, considere a possibilidade de usar lazy-loading nos nós e de descarregar totalmente nós ja visitados. A busca em profundidade é simplista demais, o que permite descarregar braços inteiros da árvore visitada sem maiores problemas;
3. Outra opção é limitar a profundidade da busca para menos níveis.

O que você está implementando?
[/quote]

Ae, estou implementando um puzzle 3x3, tentei limitar já, mas limitando fica difícil de achar a solução pois a memória não permite criar tantos objetos assim… Vou pesquisar sobre o que você disse, vlw Vini! Qualquuer opinião manda ae

abçs

Que tipo de puzzle?

3x3 não me parece algo muito grande. Quando implementei uma árvore para fazer o jogador de bejeweled, o tamanho do tabuleiro era muito maior que isso.