En este artículo vamos a explicar estas dos zonas diferentes de memoria que utiliza la JVM (Java Virtual Machine) de Java.
El Stack (Pila) se utiliza para almacenar variables locales, variables de referencia, parámetros y valores de retorno, resultados parciales. También se utiliza para llevar el control de la invocación y retorno de los métodos.
Cada thread en la JVM tiene asignado un stack privado desde el momento de su creación.
El Heap (Montículo) almacena objetos y sus variables de instancia. Es un espacio de memoria dinámica que se crea al inicio de la máquina virtual y es único.
El administrador de este espacio de memoria dinámica es el sistema de administración de almacenamiento automático o más conocido como Garbage Collector (Recolector de Basura).
Veamos con el siguiente ejemplo qué elementos se sitúan en el Stack y cuáles en el Heap:
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);
}
}
Ocurriría lo siguiente:
