Com puc gestionar l'eradicació de les fuites de memòria a Javascript?

Bloc

Com puc gestionar l'eradicació de les fuites de memòria a Javascript?

Com puc gestionar l'eradicació de les fuites de memòria a Javascript?

Si us pregunteu per què l’aplicació Javascript pot patir ralentitzacions greus, un rendiment baix, una latència elevada o bloqueigs freqüents i tots els vostres esforços intents d’esbrinar el problema van ser inútils, hi ha força possibilitats que el vostre codi estigui afectat per 'Fugides de memòria'. Les fuites de memòria són bastant habituals, ja que la gestió de memòria sovint és descuidada pels desenvolupadors a causa de les idees errònies sobre l’assignació i alliberament automàtic de memòria en llenguatges moderns de programació d’alt nivell, com ara javascript . El fet de no fer front a les fuites de memòria javascript pot causar estralls en el rendiment de la vostra aplicació i fer-la inutilitzable. Internet està inundat d’argot complex sense fi que sovint és difícil embolicar-se al cap. Per tant, en aquest article adoptarem un enfocament complet per entendre què són les fuites de memòria javascript, les seves causes i com detectar-les i diagnosticar-les fàcilment mitjançant eines de desenvolupament de Chrome.

Què són les fuites de memòria Javascript?

Una fuga de memòria es pot definir com una peça de memòria que una aplicació ja no utilitza o requereix, però que per alguna raó no es torna al sistema operatiu i encara s’ocupa innecessàriament. La creació d’objectes i variables al codi consumeix memòria. Javascript és prou intel·ligent per esbrinar quan ja no necessiteu la variable i l’esborrarà per estalviar memòria. Es produeix una fuita de memòria Javascript quan potser ja no necessiteu cap objecte, però el temps d'execució de JS encara creu que sí. A més, recordeu que les fuites de memòria javascript no són causades per un codi no vàlid, sinó per un defecte lògic del vostre codi. Condueix a un rendiment més reduït de la vostra aplicació, ja que redueix la quantitat de memòria disponible perquè pugui realitzar tasques i, eventualment, pot provocar bloquejos o bloqueigs.

Abans d’aprofundir en les fuites de memòria, és fonamental tenir una bona comprensió dels cicles de memòria, dels sistemes de gestió de memòria i dels algorismes de recollida d’escombraries.

Què és el cicle de memòria?

Una 'memòria' consisteix en una sèrie de xancles, que és un circuit de 2 estats (0 i 1) compost de 4 a 6 transistors. Un cop el xanclet es guardi una mica, continuarà conservant-lo fins que es reescrigui amb el bit contrari. Així doncs, la memòria no és res més que un conjunt de bits reprogramables. Totes les dades que s’utilitzen en un programa s’emmagatzemen a la memòria.

Cicle de memòria és la seqüència completa d’esdeveniments per a què una unitat de memòria passi d’un estat inactiu / lliure a través d’una fase d’ús (llegir o escriure) i tornar a l’estat inactiu. El cicle de memòria es pot desglossar en tres grans passos:

  1. Assignació de memòria: el sistema operatiu assigna la memòria al programa durant l'execució segons les necessitats. En llenguatges de baix nivell com C i C ++ aquest pas el gestiona el programador, però en llenguatges d’alt nivell com javascript, el sistema de gestió automàtica de memòria ho fa tot sol. Alguns exemples d'assignació de memòria en javascript -
 var n = 5; // allocates memory for a number var s = 'Hello World'; // allocates memory for a string var obj = { // allocates memory for an object a: 100, b: 'some string', c: null, }; var arr = [100, 'some string', null]; // allocates memory for the array function foo(x, y) { // allocates memory for a function return x * y; } 
  1. Ús de memòria: el programa realitza la funció de lectura i escriptura a la memòria assignada. Això pot ser llegir o escriure el valor d'una variable, un objecte o fins i tot passar un argument a una funció.
  2. Alliberament de memòria: quan la tasca ha finalitzat i la memòria assignada ja no és necessària, es deixa lliure i es deixa lliure per a una nova assignació.

El tercer pas del cicle de memòria és on es troben les complicacions. El repte més difícil aquí és determinar quan la memòria assignada ja no es necessita i s’ha d’alliberar. Aquí és on rescaten els sistemes de gestió de memòria i els seus algoritmes de recollida d’escombraries.

és una bona inversió

Sistemes de gestió de memòria - Manual contra automàtic

La gestió de memòria és el procés d’assignar blocs de memòria a diversos programes durant l’execució a petició seva i alliberar-lo per reassignar-lo quan ja no sigui necessari. Els diferents llenguatges de programació utilitzen enfocaments diferents segons la seva complexitat per fer front a la gestió de la memòria.

  • Els llenguatges de baix nivell com Pascal, C i C ++, tenen un sistema de gestió de memòria manual on el programador ha d'assignar manualment / explícitament la memòria quan sigui necessari i després alliberar la memòria després que el programa l'hagi utilitzat. Per exemple, C utilitza malloc () i calloc () per reservar memòria, realloc () per moure un bloc reservat de memòria a una altra assignació i free () per alliberar memòria al sistema.
  • Els llenguatges de programació d’alt nivell com Javascript i VB tenen un sistema automatitzat que assigna memòria cada vegada que creeu una entitat com: un objecte, una matriu, una cadena o un element DOM i l’allibera automàticament quan ja no s’utilitzen, un procés anomenat recollida d’escombraries. Les pèrdues de memòria es produeixen quan el programa encara consumeix memòria, cosa que idealment hauria de ser alliberada un cop finalitzada la tasca donada. Per alguna raó, el recollidor d’escombraries no compleix el seu propòsit i el programa es nega a alliberar la memòria, que continua consumint-se sense que sigui necessari.

Recollidors d’escombraries

Els col·leccionistes d'escombraries executen el procés de cerca de memòria que el programa ja no utilitza i la torna a alliberar al sistema operatiu per a una futura reassignació. Per trobar la memòria que ja no s’utilitza, els recol·lectors d’escombraries es basen en algorismes. Tot i que el mètode de recollida d’escombraries és molt eficaç, encara és possible que es produeixin fuites de memòria Javascript. La causa principal d’aquestes fuites és molt sovint: la 'referència no desitjada'. La principal raó d'això és el fet que el procés de recollida d'escombraries es basa en estimacions o conjectures, ja que el complex problema de si cal alliberar alguna memòria no pot ser determinat per un algorisme correctament en cada instància.

Abans d’anar més enllà, fem una ullada als dos algorismes GC més utilitzats

Com hem comentat anteriorment, qualsevol algorisme de recollida d’escombraries ha de realitzar dues funcions bàsiques. Ha de ser capaç de detectar tota la memòria que ja no s’utilitza i, en segon lloc, ha d’alliberar / repartir l’espai utilitzat pels objectes d’escombraries i tornar-lo a disposar per a la seva reassignació en el futur si cal.

Els 2 algoritmes més populars són:

  1. Recompte de referència
  2. Marca i escombra


  • Algorisme de recompte de referència

Aquest algorisme es basa en la noció de 'referència'. Es basa en comptar el nombre de referència a un objecte d'altres objectes. Cada vegada que es crea un objecte o s’assigna una referència a l’objecte, s’incrementa el recompte de referències. En JavaScript, cada objecte té una referència implícita al seu prototip i una referència explícita als seus valors de propietat.

L’algorisme de recompte de referències és l’algorisme més bàsic de recollida d’escombraries, redueix la definició d’un objecte que ja no es necessita perquè un objecte no tingui cap altre objecte que faci referència a ell. Es considera que un objecte es pot recollir i es considera que ja no s’utilitza si hi ha zero referències que hi apunten.

Llegiu més informació de la font original: Eradicació de les fuites de memòria a Javascript

java llegeix el fitxer CSV

#selenium #testing # css3 #javascript # angular.js # html5