¿Dónde viven los objetos en la JVM y qué vive en el stack?
Opciones
- Los objetos en el stack; los primitivos locales en el heap
- Los objetos en el heap; el stack de cada thread guarda variables locales y llamadas (Opción correcta)
- Todo vive en el heap, incluidas las llamadas a métodos
- Todo vive en el stack, incluidos todos los objetos
Respuesta
Los objetos en el heap; el stack de cada thread guarda las variables locales y las llamadas a métodos
Por qué
El heap es la gran zona de memoria compartida donde se crean todos los objetos (new). El garbage collector la limpia.
Cada thread tiene su propio stack: una zona pequeña donde cada llamada a un método recibe un frame con sus variables locales (primitivos y referencias a objetos). Cuando el método termina, el frame se elimina automáticamente.
Un StackOverflowError significa demasiadas llamadas anidadas (normalmente recursión infinita); OutOfMemoryError significa que el heap está lleno.
Recuerda
Heap = objetos (compartido). Stack = frames de métodos (por thread).