Con la tecnología de Blogger.

La vida de un objeto en JAVA.

En el lenguaje C++, los objetos que se crean con new se han de eliminar con delete. new reserva espacio en memoria para el objeto y delete libera dicha memoria. En el lenguaje Java no es necesario liberar la memoria reservada, el recolector de basura (garbage collector) se encarga de hacerlo por nosotros, liberando al programador de una de las tareas que más quebraderos de cabeza le producen, olvidarse de liberar la memoria reservada.

Veamos un ejemplo

public class UnaClase {
public static void main(String[] args) {
Image granImagen=creaImagen();
mostrar(granImagen);
while(condicion){
calcular();
}
}
}

El objeto granImagen, continua en memoria hasta que se alcanza el final de la función main, aunque solamente es necesario hasta el bucle while. En el lenguaje de programación C o en C++ eliminaríamos dicho objeto liberando la memoria que ocupa mediante delete. El equivalente en Java es el de asignar al objeto granImagen el valor null.

public class UnaClase {
public static void main(String[] args) {
Image granImagen=creaImagen();
mostrar(graImagen);
granImagen=null;
while(condicion){
calcular();
}
}
}

A partir de la sentencia marcada en letra negrita el recolector de basura se encargará de liberar la memoria ocupada por dicha imagen. Así pues, se asignará el valor null a las referencias a objetos temporales que ocupen mucha memoria tan pronto como no sean necesarios.

Creamos dos objetos de la clase rectángulo, del mismo modo que en el apartado anterior:

Rectangulo rect1=new Rectangulo(10, 20, 40, 80);
Rectangulo rect3=new Rectangulo();

Si escribimos

rect3=rect1;

En rect3 se guarda la referencia al objeto rect1. La referencia al objeto rect3 se pierde. El recolector se encarga de liberar el espacio en memoria ocupado por el objeto rect3.

La destrucción de un objeto es una tarea (thread) de baja prioridad que lleva a cabo la Máquina Virtual Java (JVM). Por tanto, nunca podemos saber cuando se va a destruir un objeto.

Puede haber situaciones en las que es necesario realizar ciertas operaciones que no puede realizar el recolector de basura (garbage collector) cuando se destruye un objeto. Por ejemplo, se han abierto varios archivos durante la vida de un objeto, y se desea que los archivos estén cerrados cuando dicho objeto desaparece. Se puede definir en la clase un método denominado finalize que realice esta tarea. Este método es llamado por el recolector de basura inmediatamente antes de que el objeto sea destruido.
Share on Google Plus

Sobre Rafa

Soy un apasionado de las nuevas técnologias, Internet, los videojuegos, la cultura japonesa y de USA.
    Blogger Comment
    Facebook Comment

0 comentarios:

Publicar un comentario

Gracias por comentar ;-)