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.






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.