Memória cheia. Tem thread rodando será isso?

5 respostas
J

Tenho um código pra manter:

if(x==0){
Thread t = new Thread("xxx");
t.start();
}else if(x==12){
Thread t = new Thread("yyy");
t.start();
} // aqui continua outros else if

Minha dúvida é, quando ela faz um start com t.start, após o término do método RUN da thread, ela num libera todos recursos e a thread morre? ou não, precisasia chamar o destroy()?

acho que é isso que está consumindo memória.

5 Respostas

T

A resposta certa é “boa pergunta”.

O correto é pegar algum programa, como o jhat, e ver que objetos no seu programa estão consumindo mais memória.

S

Tipo quantas vezes vc chama esse metodo ai?
Vc deve ta chamando milhoes de vezes num curto intervalo de tempo nem dando tempo pra Thread terminar o run dela.
Outra coisa, vc deu wait em algum lugar?

victorwss

A única liberação de memória que acontece é pelo coletor de lixo. Se a Thread mantinha referência a objetos e, ao morrer, estes objetos se tornam inalcançáveis, o coletor de lixo vai pegá-los. Se estes ainda continuam alcançáveis, o coletor de lixo não vai pegá-los.

Não use o método Thread.destroy(). Ele é depreciado, nunca foi implementado e provavelmente nunca vai ser implementado (se você chamá-lo, ele lança um Error dizendo que não foi implementado).

luistiagos

Não querendo ser chato mas ficaria melhor se vc deixasse assim:

Thread t = null;
if(x==0){   
 t = new Thread("xxx");   
}else if(x==12){   
 t = new Thread("yyy");   
} // aqui continua outros else if 

 if (t != null) {
   t.start();   
 }
Marcelo_FS

Sagatiba:
Tipo quantas vezes vc chama esse metodo ai?
Vc deve ta chamando milhoes de vezes num curto intervalo de tempo nem dando tempo pra Thread terminar o run dela.
Outra coisa, vc deu wait em algum lugar?

Se esse for realmente o caso, dá uma olhada no java.concurrent.ExecutorService :wink:

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