1. Inicio
  2. Documentos
  3. Contribuir
  4. Administración de memoria

Administración de memoria

gestión de la memoria de NectarJS en tiempo real, sin recolector de basura.

Puntero integrado compartido

En NectarJS cada valor es un puntero para un tipo de valor de un objeto. Cada valor del objeto tiene su propio mostrador que les deja cuando estan fuera del alcance para determinar si ellos tiene que borrarse o no.

For example: let’s take this code:

function setMessage(_envelope)
{ // _envelope.counter++
  _envelope.msg = "hello";
} // _envelope.counter--

var myEnvelope = {}; // myEnvelope.counter = 1

setMessage(myEnvelope);

console.log(myEnvelope.msg);

// myEnvelope.counter = 0;

En este fragmento de códifo, la función setMessage toma _envelope como un argumento y establecer la propiedad msg con el mensaje "hello". setMessage takes _envelope as argument and set the property msg with the message “hello”.

Nuestro programa una vez ejecutado crea una var myEnvelope como en un objeto vacio. NectarJs crea en ese momento una var con un puntero a un objeto de valor. Ese valor de objeto tiene un contador de 1. myEnvelope as en empty object. NectarJS creates in this moment a var with a pointer to an Object value. This Object value has a counter of 1.

Después, llamamos la función setMessage con myEnvelope tiene un argumento. En ese momento, myEnvelope es pasado como una referencia en la función myEnvelope. NectarJS incrementa el counter of the _envelop value as igual que myEnvelope para 1, así el counter of myEnvelope es 2. setMessage, with myEnvelope has an argument. At this moment, myEnvelope is passed as a reference in the function setMessage, NectarJS increments the counter of the _envelop value, the same as myEnvelope, by 1. So, the counter of myEnvelope is 2.

Establecemos la propiedad msg de myEnvelope con el valor "hello", después al final de setMessage. En ese momento _envelope esta out of scope, asi que NectarJS decrements the counter of the _envelope valor por 1. Ahí el contador del valor de myEnvelope por 1, no inferior a 1 asi NectarJS no lo elimina. msg of myEnvelope with the value “hello”, then we the end of setMessage. At this moment, _envelope is out of scope, so NectarJS decrements the counter of the _envelope value by 1. At this moment, the counter of the value of myEnvelope is 1, not inferior at 1, so NectarJS doesn’t delete it.

We then call the function console.log() with myEnvelope.msg as parameter. This will print “hello” in the console. Then, we reach the end of the program, so myEnvelope is out of scope. NectarJS decrements its value by 1. Its value is now 0, inferior at 1, so NectarJS deletes it.

Registro de memoria

Una var en NectarJs tiene su propio puntero, actuando en una dirección de memoria registrada. Cuando una variable es creada, copiada o pasada por una referencia, un nuevo puntero esta creado para manejarlo. Una vez la var esta fuera del alcance, el puntero es marcado como libre de usar. Eso significa que la ubicación en el registro es libre para ser reutilizada.

Por ejemplo, tenemos 6 variables: var_a, var_b, var_c, var_d, var_e, var_f. Cada una es cradada como valor de puntero a partir de 0 a 5. Este es nuestro registro:

VAR_AVAR_BVAR_CVAR_DVAR_EVAR_F

En nuestro codigo, nos dirigimos fuera del rango de var_c asi el registro de ubicación del puntero var_c pointer es limpiado y nuestro nuevo registro es:

VAR_AVAR_BEMPTYVAR_DVAR_EVAR_F

Eso significa que si creamos un nuevo var llamado var_g, la gestión de memoria dara 3 como el siguiente valor del puntero por ese nuevo var. Nuestro registro se vera así:

VAR_AVAR_BVAR_GVAR_DVAR_EVAR_F

¿Por qué una memoria de registro?

La memoria de registro tiene 2 grandes ventajas que no registran para nada:

  • Ganancia de rendimiento hasta 10 veces
  • Funciones de depuración para el futuro de NectarJS

Parece que en todos los puntos de referencia que ejecutamos, pasamos de minutos a segundos para el tiempo de ejecución con la memoria registrada. Respecto al registro de memoria y como es manejada la variable, el registro es tambien una gran herramienta que nos ayuda a detectar problemas como fugas de memoria.

¿Te resultó útil este artículo? Si No

¿Cómo podemos ayudarle?