ClubEnsayos.com - Ensayos de Calidad, Tareas y Monografias
Buscar

Memoria en Java


Enviado por   •  8 de Noviembre de 2018  •  Apuntes  •  2.447 Palabras (10 Páginas)  •  151 Visitas

Página 1 de 10

Garbage Collector - Memoria[pic 1]

Garbage Collector.

El Garbage Collector es una función que posee Java (entre otros lenguajes basados en objetos) que permite liberar la memoria de los objetos que el sistema ya no necesita y que han sido des-referenciados. El garbage collector es un proceso de baja prioridad se llama automáticamente, aunque puede ser llamado manualmente por el programador desde nivel código o Visual VM.

Funcionamiento.

El GB se encarga de liberar memoria eliminando los objetos “marcados” o “seleccionados”.

Un objeto es seleccionado para la recolección cuando su variable de referencia se pierde durante la ejecución del programa, estos objetos también se los conoce como Objetos Inaccesibles.

Una referencia es una dirección que indica donde están almacenadas las variables y los métodos de un objeto.

Los objetos no son usados actualmente cuando se asignan a una variable o son pasados como un argumento a un método.

Por otro lado, las referencias a los objetos son usadas en todos lados, por ejemplo:

        Box mybox = new Box();   //referencing to object

En java, la memoria es asignada en el tiempo de ejecución, el área de la HEAP puede liberarse por el proceso de recolección, el cual es solo un método para liberar memoria cuando no está siendo utilizada por el programador. Solo los objetos que ya no tienen una referencia son legibles para la recolección.

[pic 2]

La HEAP se divide en tres secciones:

  • Young Generation – Los objetos recientemente creados inician en Young Generation. Esta sección se divide en espacio Eden, donde inician todos los objetos nuevos, y dos espacios Survivor, donde los objetos son movidos de Eden después de sobrevivir un ciclo de GC. Cuando los objetos son recolectados en la sección Young Generation, es un evento menor del GC.
  • Old Generation – Los objetos de mayor tiempo de vida son eventualmente movidos de Young Generation a Old Generation. Cuando los objetos son recolectados en la sección Old Generation, es un evento mayor del GC.
  • Permanent Generation – Metadatos tales como clases y métodos son almacenados en Permanent Generation. Las clases que ya no están en uso pueden ser recolectadas de esta sección.

Durante un evento completo del recolector de basura, todos los objetos no utilizados o inaccesibles son recolectados.

El HotSport posee cuatro tipos de GC:

  • Serial – Todos los eventos de recolección son conducidos en serie por un solo hilo, se ejecuta la compactación después de cada recolección.
  • Parallel – Se utilizan múltiples hilos para una recolección menor. Un solo hilo se utiliza para una recolección mayor y luego la compactación de Old Generation. Alternativamente, la variante paralela Old usa múltiples hilos para una recolección mayor y compactación en Old Generation.
  • CMS (Concurrent Mask Sweep) – Múltiples hilos usados para una recolección menor usando el mismo algoritmo de paralelo

https://dzone.com/articles/java-garbage-collection-best-practices-tutorials-and-more

Casos de objetos inaccesibles.

Algunos métodos para hacer los objetos legibles para la recolección son:

  1. Objetos creados dentro de un método – Cuando un método es invocado este va al marco de la pila. Cuando el método es expulsado de la pila, todos sus miembros “mueren” y si algunos objetos creados dentro estos se convierten en inaccesibles o anónimos después de la ejecución del método y por lo tanto se convierten en legibles para la recolección.

class Test

{

     

    // to store object name

    String obj_name;

     

    public Test(String obj_name)

    {

        this.obj_name = obj_name;

    }

     

    static void show()

    {

        //object t1 inside method becomes unreachable when show() removed

        Test t1 = new Test("t1");

        display();

         

    }

    static void display()

    {

        //object t2 inside method becomes unreachable when display() removed

        Test t2 = new Test("t2");

    }

     

    // Driver method

    public static void main(String args[])

    {

        // calling show()

        show();

         

        // calling garbage collector

        System.gc();

    }

     

    @Override

    /* Overriding finalize method to check which object

    is garbage collected */

    protected void finalize() throws Throwable

    {

        // will print name of object

        System.out.println(this.obj_name + " successfully garbage collected");

    }

}

Salida producida:

        t2 successfully garbage collected

        t1 successfully garbage collected

  1. Reasignar la variable de referencia – Cuando el ID de referencia de un objeto es referenciado al ID de algún otro objeto, entonces el objeto anterior ya no tiene ninguna referencia a él y se convierte en inaccesible, por lo tanto, se convierte en legible para la recolección.

 

class Test

{

    // to store object name

    String obj_name;

     

    public Test(String obj_name)

    {

        this.obj_name = obj_name;

    }

     

    // Driver method

    public static void main(String args[])

    {

        Test t1 = new Test("t1");

        Test t2 = new Test("t2");

         

        //t1 now referred to t2

...

Descargar como (para miembros actualizados)  txt (10.6 Kb)   pdf (179.2 Kb)   docx (34.1 Kb)  
Leer 9 páginas más »
Disponible sólo en Clubensayos.com