Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Duda en Java. Desreferenciar un objeto para que se elimine. [SOLUCIONADO]

Iniciado por technobroken, 07 de Abril de 2012, 09:23:21 AM

« anterior - próximo »

technobroken

Hola,

tengo un codigo tal que asi:

public void Add(Bullet bullet) {
for (int i=0;i<m_vector.size();i++) {
if (m_vector.get(i).m_isAlive == false) {
Bullet old = m_vector.set(i,bullet);
old = null;
return;
}
}
m_vector.add(bullet);
}


Mi duda es saber si estoy haciendo bien poniendo "old = null" con la intención de que ese objeto sea recogido por el recolector de basura.

blau

Ummm...

si un objeto se queda sin referencias a él es recolectado ... con lo cual tal y como lo haces la variable old no tiene sentido... se va a recolectar de todas formas...

otra cosa es que esté bien hacerlo o no... en un juego deberías evitar que salte el recolector de basura...

si vas a disparar una bala por segundo casi que te da igual... pero si vas a tener cienes de balas por segundo seguramente  quizás interesara tener una lista de objetos en desuso... donde insertar las balas en desuso... para luego recuperarlas cuando vayas a crear nuevas balas...

Un saludo

technobroken

Gracias blau por tu pronta respuesta.

Si al final he decidido reusar.

public void Add(Bullet bullet) {
for (int i=0;i<m_vector.size();i++) {
Bullet bullet_i = m_vector.get(i);
if (bullet_i.m_isAlive == false) {
bullet_i.Copy(bullet);
return;
}
}
m_vector.add(bullet);
}

Buffon

lo que ha dicho blau, de todas maneras tu código está mal.

Si yo tengo un

List<Balas> misBalas = new ArrayList<Balas>();


y en un momento determinado tengo 100 balas y quiero eliminar la 50, el siguiente código no funciona.


//Ahora tenemos 100 elementos en misBalas
//La bala 50 sólo tiene una referencia en estos momentos
Bala bala = misBalas.get(50);
//La bala 50 tiene 2 referencias en estos momentos
bala = null;
//La bala 50 tiene 1 referencia así que sigue sin destruirse.

//Para destruir la bala 50 tenemos que eliminarla de la lista.