WebHU - Programozási kérdések és válaszok

Hogyan történik a szemétgyűjtés a JavaScriptben?

Vegye figyelembe az alábbi JavaScript kódot. Létrehozok mondjuk 4 elemből álló tömböt, majd azonnal törlöm a hivatkozást. Mikor lesz szemétszállítás? Tudom, hogy ez kifejezetten a nyelvi megvalósításra vonatkozik, de nincs sok JavaScript-motorunk.

Szerkesztés: ez a lehető legegyszerűbb eset, de érdekel, mert a szemétgyűjtés hallható hibákat okoz egyes webes audioalkalmazásokban.

var a = [1, 2, 3, 4];
a = null;
// other code

Frissítés: Javascript és szemétgyűjtés nem magyarázza meg az események sorrendjét és kiváltásának módját. Nem akarom irányítani a szemétszállítást. Jobb megértésre van szükségem, hogy jobb kódot tervezhessek.


  • válasz: stackoverflow.com/questions/18800440/ 14.05.2015
  • developer.mozilla.org/en-US/docs/Web/JavaScript/ 14.05.2015
  • Köszönöm, olvastam néhányat. Pontosítom a kérdésem, amint jobban megértem. 14.05.2015
  • @BhawinParkeria Nem fogadnám el válasznak. Lenne egy nagyon konkrét kérdésem. Nem pusztítom el a tömböt. 14.05.2015
  • ez egy megjegyzés, valójában nem fogadhatod el válaszként, csak tippet adtam, nem baj, ha nem működött neked 14.05.2015
  • Gyanítom, hogy a szemétgyűjtés akkor fut le, ha nincs más futtatható kód. Egyszerű parancssori szkriptekhez, amelyek a szkript végén találhatók. Az eseményhurokban lévő szerver/böngésző kódhoz (az i/o és az UI események között) 14.05.2015

Válaszok:


1

A GC-k számos módon aktiválhatók

  • allokáció-triggerelés: nincs több hely az allokációs pufferekben/fiatal generáció/bárhogyan hívják, és egy GC szükséges az objektumok felszabadításához.
    Ez egy kicsit bonyolultabb vegyes GC/kézi allokációs környezetben. Előfordulhat, hogy a malloc wrappereknek is ki kell váltaniuk a GC-ket, mivel a javascript képes megtartani a manuálisan lefoglalt erőforrásokat.
  • [böngészőben] amikor egy lapot/ablakot bezárnak/lecserélnek azzal a feltételezéssel, hogy ezen a ponton sok a könnyen összegyűjthető szemét
  • a növekményes gyűjtések heurisztikája által időzített, a szüneteltetési idő céljának elérése érdekében
  • A privilegizált javascript képes lehet közvetlenül a gyűjtemények elindítására
  • a különböző, nem GC által felügyelt összetevők utolsó erőfeszítéseként, ha kifogynak a natív erőforrásokból (fájlkezelők, virtuális címtér), abban a reményben, hogy a véglegesítésre váró GC objektumok megtartják őket

Valószínűleg vannak más okok is, amelyek jelenleg eszembe jutnak. Általában nem kell ezzel foglalkoznia.

Ha alacsonyan szeretné tartani a GC-ket, akkor alacsonyan kell tartania az objektumkiosztási arányt. Például. egyes algoritmusok profitálhatnak az előre lefoglalt pufferekből, amelyeken munkájukat végzik. Ennek a stratégiának a hatékonysága attól függ, hogy a JavaScript futtatókörnyezet rendelkezik-e menekülési elemzéssel, és mennyire hatékony a rövid távú kiosztások elkerülésében. És azon, hogy a gyűjtő generációs-e. Egy generációs gyűjtő sokkal kevésbé szenved a gyors, rövid életű allokációktól.

14.05.2015

2

Jó módszer a már nem használt objektumok hivatkozásainak törlése. Sok (majdnem minden) javascript-motor használja a Mark and Sweep megközelítést. Ha töröl egy hivatkozást egy objektumra, és nincs más hivatkozása, akkor valószínűleg a következő Mark and Sweep ciklusban összegyűjti.

A szemétgyűjtés ciklikus megközelítés, amely néhány motornál rendszeres időközönként történik. Egyes motorok azt mondják, hogy hatékonyan végzik a GC-t, de nem áll rendelkezésre érvényes dokumentáció.

14.05.2015
  • nincs elérhető érvényes dokumentáció. Számos nagy világszínvonalú JS-motor nyílt forráskódú. 14.05.2015
  • Új anyagok

    A rádiógomb ellenőrzött eseményének használata a jQueryben
    Ebben a cikkben látni fogjuk, hogyan kell dolgozni a jquery választógombbal ellenőrzött eseményeivel. A választógombok HTML gombok, amelyek segítenek kiválasztani egyetlen értéket egy csoportból...

    Körkörös függőségek megoldása terraformban adatforrásokkal – lépésről lépésre
    Mi az a körkörös függőségek Dolgozzunk egy egyszerű eseten, amikor az SQS-sor és az S3-vödör közötti körkörös függőség problémája van egy egymástól függő címkeérték miatt. provider..

    Miért érdemes elkezdeni a kódolást 2023-ban?
    01100011 01101111 01100100 01100101 — beep boop beep boop Világunk folyamatosan fejlődik a technológia körül, és naponta fejlesztenek új technológiákat a valós problémák megoldására. Amint..

    🎙 Random Noise #2  – Örökbefogadás és hit
    az analitika íratlan világának gondozása Szeretné, hogy ezek a frissítések a postaládájába kerüljenek? Iratkozzon fel itt . "Ha önvezető autókat gyártanak, akkor mi miért ne..

    A legrosszabb politika és prediktív modellek májátültetésre jelöltek számára az Egyesült Államokban
    A máj (vagy óangolul lifer) az emberi test legnehezebb belső szervére utal, amely csendesen működik a nap 24 órájában. Mit csinál a máj? 500 feladatot hajt végre a szervezet egészségének..

    5 webhely, amely 2022-ben fejleszti front-end fejlesztői készségeit
    Frontendmentor.io A tényleges projektek létrehozásával a Frontendmentor.io segítséget nyújt a front-end kódolási képességeinek fejlesztésében. A kódolást azután kezdheti meg, hogy..

    Mikor kell használni a Type-t az interfészhez képest a TypeScriptben?
    A TypeScript a JavaScript gépelt szuperkészlete, amely statikus gépelést ad a nyelvhez. Ez megkönnyíti a robusztus és karbantartható kód írását azáltal, hogy a hibákat a fordítási időben..