El comportamiento de JavaScript es síncrono, es decir, solamente puede ejecutar una tarea a la vez. Esto puede ser beneficio o perjudicial dependiendo los casos. Por ende, para ejecutar cada tarea, JavaScript se organiza en dos estructuras de datos: el Memory Heap y el Call Stack.
Qué es Memory Heap
El memory heapconsiste en una manera desorganizada o aleatoria de guardar la información, ya sea valores, funciones, entre otros. ¿Recuerdas el componente de tu computador que guarda información de manera aleatoria? Exactamente, la RAM es donde guardará esta información mediante una referencia o dirección.
Por ejemplo, declaras una variable nombre y le asignas un valor, esta se guardará en la memoria RAM utilizando una referencia que manejará el memory heap. De esta manera, el Engine sabrá que variable mostrar cuando sea utilizada después de la declaración, pidiendo la referencia de memoria al memory heap y buscándola en la memoria RAM.
Valores por referencia
¿Qué pasa con estructuras más complejas, como arrays u objetos? Pues que estas se guardarán en una dirección de memoria diferente a sus valores, pero referenciadas entre sí. Por ejemplo, mira el siguiente código y piensa cuál es el resultado:
Primero mostrará el valor 2 y después true. La explicación es que la referencia de ambos objetos a sus valores es la misma, por lo que si modificas un valor, también lo harás en ambos.
Los objetos en JS (objetos, arrays, funciones y básicamente todo lo que no sea un valor primitivo) se almacenan en la parte de memoria que de llama Memory Heap. Los valores primitivos son almacenados en el Call Stack, dentro del Scope (Contexto de Ejecución de la función que tenga acceso a esa variable). Acceder al Call Stack es mucho más rápido que al Heap. Además, en el Call Stack también se guardan las referencias, “como si fueran valores primitivos”. Cuando se asigna una variable a otra y esta apunta a un objeto, se copia la referencia, como si fuera un valor primitivo. Si el objeto tiene atributos como un número por ejemplo, este se guarda en la posición de memoria reservada para ese objeto. Los objetos también pueden tener más objetos dentro. En ese caso, dentro de la posición de memoria de ese objeto se va a guardar una referencia a otra posición de memoria
Excelente Aporte!
Excelente aporte! tks!
Memory Heap
Donde se almacena los valores de las variables y las funciones
Se destina un espacio en memoria para las variables.
La información en el memory heap, No se guarda de manera lineal
Gracias, por el aporte.
Buen aporte!
Que es el memory heap?
Es un lugar donde se guardan objetos y funciones en bloques de memoria de forma arbitraria y sin un orden, los cuales pueden ser usados múltiples veces y sin una referencia unica.
hola andres, pero hay algo que no entiendo en el vídeo, el profe de granda dijo que en memory heap se guardan o almacenan los valores de las variables y funciones, pero en ningún lado habla sobre objetos, entonces eso me confunde diego dice una versión pero tu dices otra en fin quien tiene razón ?
pdta: se que es una respuesta del examen y que obviamente seria la correcta, pero créeme no lo entiendo podrías explicarme por favor.
Hola javi, creo que a lo que se refiere es que un objeto tambien puede ser una varibale !
parece el cerebro, no sabes donde guardas lo que aprendes
Tienes mucha razon... Aunque de manera teorica si que sabemos donde se guardan la informacion que aprendes dia a dia. Y es en el Hipocampo, donde se almacena todo lo aprendido.
Curiosa manera de verlo.
La forma en que funciona el Memory Heap se llama almacenamiento por nodos, al momento de almacenar la variable/objeto lo encapsula y le asigna un id y un id padre, esto se conoce como nodos, lo que le permite al motor saber cuales son las variables y su contenido enlazado en caso que sea un objeto. Así el motor administra la memoria y este “estante” es limpiado una vez termina la ejecución del JS
Muy interesante...
Buen aporte, gracias.
El memory heap se guarda en la RAM, y esta es una memoria volátil (Es decir, no puede preservar la información una vez el computador se apaga)
Por lo que, si se cierra el navegador o se apaga el computador, lo que haya estado en el memory heap se pierde.
Interesante dato, no lo menciona en la clase
Les recomiendo este video. Lo vi hace un tiempo y tambien es habla de callstack.
Philip Roberts: ¿Que diablos es el "event loop" (bucle de eventos) de todos modos? | JSConf EU
Muchas gracias :D
#Excelente
Guarda las variables y funciones de manera no lineal en la memoria como si se tratara de una repisa
#Bien
Gracias.
El memory heap guarda todos los datos de manera "desordenda", pero JavaScript sabe en dónde están esos datos.
JavaScript es un lenguaje de un solo hilo, aunque pudiera parecer multitarea, este efecto es gracias al Event Loop:D!
Si quieren hacer código rápido en el navegador sin tener que estar en alguna página web solo tienen que poner la url de **about:blank **y les saldra una página totalmente en blanco.
rip, el profe siempre inicia con preguntas de ¿como estás?/¿cómo vas? y nadie le responde :(
La gracia es que contestes como si estuvieras viendo dora la exploradora para que la experiencia sea completa.
ésta parte de la clase me gusta muchísimo. Diego hace que tú mismo te preguntes cómo vas...simplemente genial
Les comparto mis apuntes, espero les sea de ayuda.
MEMORY HEAP.!
It’s that space in memory where the engine saves values under the variable names so when they are called from the call-stack this will have a direct link to those values.
Complex variables have different spaces within the memory heap.
🚀 ⚙️ ¿Cómo almacena la información JavaScript?
Los objetos
Los objetos en JS (objetos, arrays, funciones y ++básicamente todo lo que no sea un valor primitivo++) se almacenan en una parte de memoria que de llama Memory Heap.
Los valores primitivos
Los valores primitivos son almacenados en algo llamado Call Stack.
El scope y su forma de trabajar.
Dentro del Scope o el ++Contexto de Ejecución++. Acceder al Call Stack es mucho más rápido que al Heap.
Además, en el Call Stack también se guardan las referencias, “como si fueran valores primitivos”.
Cuando se asigna una variable a otra y esta apunta a un objeto, se copia la referencia, ++como si fuera un valor primitivo++.
Si el objeto tiene atributos como un número por ejemplo, este se guarda en la posición de memoria ++reservada++ para ese objeto.
Los objetos también pueden tener más objetos dentro. En ese caso, ++dentro de la posición de memoria de ese objeto se va a guardar una referencia a otra posición de memoria++
He leído de compañeros y en otros sitios que las variables con valores primitivos se guardan en el stack, mientras que en el memory heap se guardan las funciones y los objetos.
Alguien que me aclare en estos dos puntos de vistas distintos.
conseguí una respuesta, espero le sirva a alguien en el futuro:
cuando creamos un objeto o una función y lo asignamos a una variable, suceden dos cosas.
Se guarda el objeto/función en el memory heap.
Se crea en el stack la variable, y esta almacenará la ubicación del objeto, y no al objeto en sí.
.
Fuente:
Heap es un espacio diferente para almacenar datos donde JavaScript almacena objetos y funciones.
A diferencia de Stack, el engine no asigna una cantidad fija de memoria para estos objetos. En su lugar, se asignará más espacio según sea necesario.
La asignación de memoria de este modo también se denomina dynamic memory allocation.
Stack
Valores primitivos y referencias.
El tamaño se conoce en tiempo de compilación.
Asigna una cantidad fija de memoria.
Heap
Objetos y funciones
El tamaño se conoce en tiempo de ejecución
No hay límite por objeto
Memory Heap => Donde todos los datos son guardados: variables, funciones, objetos.
Call Stack => Determina el ORDEN en el que las cosas son llamadas
#Indeed
Yo creo que js puede ser todo lo asincrónico que quieras, otra cosa es que te lo permita tu engine. Los lenguagajes de programación ni son asincronos ni son síncronos, lo que es sincrono o asíncrono es el engine que los corre.
Lo que es sincrono o no es el codigo escrito en js. Si es escrito sincrono se comportará asi. Las funciones js son sincronas y las web apis asincronas
Cuando nos referimos al código de ejecución, estamos entrando en el tema de la sincronía de JavaScript, esto quiere decir que JavaScript puede realizar una tarea a la vez, y no varias al mismo tiempo.
El Memory Heap es el lugar de la memoria donde se almacenan los valores de las variables (variables, funciones, arrays, objetos). Y esto se conecta directamente con la pila de ejecución (Call Stack).
Veamos un ejemplo. Cuando nosotros declaramos una variable, ¿qué ocurre?
const nombre ="Sebastian";
El motor de JavaScript lee cada uno de los keywords (const = variable, nombre = nombre de la variable, "Sebastian" = valor de la variable) y designa un espacio en la memoria para esta variable. Si llamamos a la variable posteriormente, el motor nos devuelve el valor de esta.
console.log(nombre)// Sebastian
Con esto, podemos entender al Memory Heap como un estante en donde podemos almacenar los datos (variables y funciones) (cada uno en una sección del estante) y luego podremos retirarlos si lo deseamos. Algo curioso es que el Memory Heap no tiene un orden específico para guardar las variables (orden lineal), sino que puede tener estos datos guardados en distintas partes de la memoria y esto no afectará a la ejecución del código.
SINGLE THREAD (Synchronous)
-Javascript solo puede hacer una tarea a la vez
MEMORY HEAP
-Donde se guardan los valores de todas nuestras variables, constantes y lets,así como las funciones
-No se guarda de forma numerica o lineal, se guardan en diferentes partes
Holaa ,tengo una duda y es:¿que quiere decir que puedan ser usados sin una referencia única?