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: