Java Stack and Heap: tutorial de asignación de memoria de Java

¿Qué es Stack Memory?

Stack in java es una sección de memoria que contiene métodos, variables locales y variables de referencia. La memoria de pila siempre se referencia en el orden de último en entrar primero en salir. Las variables locales se crean en la pila.

¿Qué es Heap Memory?

Heap es una sección de memoria que contiene objetos y también puede contener variables de referencia. Las variables de instancia se crean en el montón

Asignación de memoria en Java

La JVM dividió la memoria en las siguientes secciones.

  1. Montón
  2. Apilar
  3. Código
  4. Estático

Esta división de la memoria es necesaria para su gestión efectiva.

  • La sección de código contiene su bytecode .
  • La sección Pila de la memoria contiene métodos, variables locales y variables de referencia.
  • La sección Heap contiene Objects (también puede contener variables de referencia).
  • La sección estática contiene datos / métodos estáticos .

Diferencia entre variable local e instancia

La variable de instancia se declara dentro de una clase pero no dentro de un método

La variable local se declara dentro de un método que incluye argumentos de método .

Diferencia entre pila y montón

Tomemos un ejemplo para entender esto mejor.

Considere que su método de llamada principal método m1

En la pila java, se creará un marco a partir del método m1.

La variable X en m1 también se creará en el marco para m1 en la pila. (Ver imagen a continuación).

El método m1 llama al método m2. En la pila java, se crea un nuevo marco para m2 en la parte superior del marco m1.

Las variables byc también se crearán en un cuadro m2 en una pila.

El mismo método m2 llama al método m3. De nuevo, se crea un marco m3 en la parte superior de la pila (ver imagen a continuación).

Ahora supongamos que nuestro método m3 está creando un objeto para la clase “Cuenta”, que tiene dos instancias variables int p e int q.

Aquí está el código para el método m3

La declaración nueva cuenta () creará un objeto de cuenta en el montón.

La variable de referencia “ref” se creará en una pila java.

El operador de asignación “=” hará una variable de referencia para apuntar al objeto en el Heap.

Una vez que el método ha completado su ejecución. El flujo de control volverá al método de llamada. Que en este caso es el método m2.

La pila del método m3 se eliminará.

Dado que la variable de referencia ya no estará apuntando al objeto en el montón, sería elegible para la recolección de basura.

Una vez que el método m2 haya completado su ejecución. Saldrá de la pila y toda su variable se vaciará y dejará de estar disponible para su uso.

Del mismo modo para el método m1.

Finalmente, el flujo de control volverá al punto de inicio del programa. Que por lo general, es el método “principal”.

¿Qué pasa si Object tiene una referencia como su variable de instancia?

En este caso, la variable de referencia “niño” se creará en el montón, que a su vez apuntará a su objeto, algo así como el diagrama que se muestra a continuación.

Resumen:

  • Cuando se llama a un método, se crea un marco en la parte superior de la pila.
  • Una vez que un método ha completado la ejecución, el flujo de control vuelve al método de llamada y su correspondiente marco de pila se vacía.
  • Las variables locales se crean en la pila
  • Las variables de instancia se crean en el montón y son parte del objeto al que pertenecen.
  • Las variables de referencia se crean en la pila.
0 replies

Leave a Reply

Want to join the discussion?
Feel free to contribute!

Leave a Reply

Your email address will not be published. Required fields are marked *