dúvida criação de objetos

6 respostas
A

Pessoal, estou com uma dúvida bem básica de java.
No código abaixo:

while (true)
{

Double d = new Double (545);

}

A cada vez que ele passar por este linha que cria o Double uma nova variável será criada ou a mesma variável é reiniciada? eu achava que
uma nova era criada, mas fiz um teste e vi que e memória não aumenta muito quanto rodamos o código acima. (ou seja, parece que é usado sempre o mesmo espaço de memória)

queria saber se vai dar problema se eu fizer um negocio assim.

eu tenho uma classe que implementa a interface Runnable, chamada, por exemplo, objRunnable.

eu inicializo ela dentro de um while, do tipo que fiz acima, desta maneira:

while (true)
{

  ClasseRunnable objRunnable = null;
  objRunnable = ClasseGeradoraDeObjRunnable.MeDeUmObjRunnable();  
  

   Thread thExecutor = new Thread(objRunnable);
				
   thExecutor.setPriority(6);

   thExecutor.start(); 

}

ou seja, será que eu vou ter problema se fizer um negocio assim (já que eu mando o objRunnable que eu criei para um Thread, e este objeto não deveria ser destruido, porque na próxima iteração do laço, quando chegar nesta parte:

ClasseRunnable objRunnable = null;

o objRunnable que eu criei anteriormente ainda estará em execução.

6 Respostas

Rafael_Steil

Nao tem problema, ja que sao instancias diferentes do objeto. O mesmo vale para o lance do Double.

Rafael

A

entendi, valeu :wink:

kina

Aproveitando a pergunta:
codigo 1:

String a = null;
while(condicao){
 a = new String("aaa");
}

codigo 2:

while(condicao){
String a = new String("aaa");
}

qual a diferença, em questão de custo para JVM, entre o primeiro código e o segundo?

rhenrique

A única diferença é a criação da referência ‘a’ mais de uma vez. Mas para a maioria dos sistemas essa criação repetida é insignificante e, normalmente, deixa o código mais claro.

Quanto ao outro código, você não precisa desse null:

ClasseRunnable objRunnable = null;
    objRunnable = ClasseGeradoraDeObjRunnable.MeDeUmObjRunnable();

Basta colocar:

ClasseRunnable objRunnable = ClasseGeradoraDeObjRunnable.MeDeUmObjRunnable();
cv1

Nada como usar o javap pra responder a essas questoes. ;)

public void a();
  Code:
   0:   goto    6
   3:   ldc     #26; //String aaa
   5:   astore_1
   6:   aload_0
   7:   getfield        #2; //Field condicao:Z
   10:  ifne    3
   13:  return

public void b();
  Code:
   0:   goto    6
   3:   ldc     #26; //String aaa
   5:   astore_1
   6:   aload_0
   7:   getfield        #2; //Field condicao:Z
   10:  ifne    3
   13:  return

}

Ou seja, o bytecode gerado eh exatamente o mesmo. ;)

A

tem como usar esse javap pelo eclipse?

Criado 23 de maio de 2005
Ultima resposta 23 de mai. de 2005
Respostas 6
Participantes 5