RSS

Asignaciones – Heap y Stack.

19 Sep

El Heap (Montículo) y el Stack (Pila) son diferentes memorias que utiliza la Java Virtual Machine de Java.

Mientras que para cada thread en la JVM se tiene un Stack privado, el Heap es un espacio de memoria dinámica único que se crea al inicio de la máquina virtual. El administrador del Heap es el sistema de administración de almacenamiento automático o más conocido como Garbage Collector.

¿Qué se guarda en el Stack?
– variables locales
– variables de referencia
– parámetros y valores de retorno
– resultados parciales
– el control de la invocación y retorno de métodos

¿Qué se guarda en el Heap?
– objetos
– variables de instancia

Ejemplo:

public class EjemploStackYHeap{
    int atributoEntero;
    String atributoCadena;

    public void setAtributoEntero (int x) {
        atributoEntero = x;
    }

    public void setAtributoCadena(String s) {
        atributoCadena = s;
    }

    public static void main (String[] args){
        int enteroLocal = 5;
        String cadenaLocal = "atributo";

        EjemploStackAndHeap e = new EjemploStackAndHeap();
        e.setAtributoEntero (enteroLocal);
        e.setAtributoCadena (cadenaLocal);
    }
}

Comienza la ejecución con main.
Se declara e inicializa una variable de tipo primitivo, enteroLocal.
Se almacena esta variable y su valor en el Stack.

Se declara e inicializa una variable de tipo de referencia.
La variable se crea en el Stack. El objeto se crea en el Heap.
La variable apunta al objeto String en el Heap.

Se llama al constructor EjemploStackAndHeap(). El constructor crea en el Heap el espacio para el objeto y sus atributos. Se inicializan los valores según el tipo de los atributos. En el Stack se crea la variable de referencia e que apunta al objeto en Heap.

Se llama a setAtributoEntero con el parámetro enteroLocal. La variable del método setAtributoEntero x recibe el valor de enteroLocal. Se le asigna el valor de x a atributoEntero. (El método tiene una variable this que apunta al objeto, de esta forma puede acceder a sus atributos).

Se llama a setAtributoCadena con el parámetro cadenaLocal. La variable del método setAtributoCadena s recibe el valor de cadenaLocal. Se le asigna el valor de s a atributoCadena. (El método tiene una variable this que apunta al objeto, de esta forma puede acceder a sus atributos).

Mas información:
http://tech-read.com/2008/12/15/jvm-stack-and-heap/

Anuncios
 
2 comentarios

Publicado por en 19 septiembre, 2011 en Estudio, Tema 3

 

Etiquetas: , , , , ,

2 Respuestas a “Asignaciones – Heap y Stack.

  1. Virginia Lopez

    27 septiembre, 2011 at 7:00 pm

    Gracias, Grace!

     
  2. grace

    26 septiembre, 2011 at 12:01 am

    Buen ejemplo

     

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

 
A %d blogueros les gusta esto: