Ephemeron - Ephemeron
![]() | tento článek vyžaduje pozornost odborníka na informatiku. Specifický problém je: opomenutí popsat důležité podrobnosti.Leden 2013) ( |
An efemeron je datová struktura, která v systému řeší dva související problémy odpadky shromážděny systémy. Na jedné straně ephemeron poskytuje oznámení, když se chystá shromáždit nějaký objekt. Na druhou stranu efemeron umožňuje, aby byla data spojena s nějakým objektem bez vytvoření odkazu na tento objekt, který zabrání shromažďování objektu. Ephemeron je pár klíč-hodnota, kde klíčem je objekt, který hlídá ephemeron, upozorňuje systém, když je tento objekt sbíratelný, a hodnotou mohou být jakákoli data spojená s objektem, například seznam vlastností, a který může být prázdný. Protože prvky seznamu vlastností mohou odkazovat zpět na klíč, mohou bránit shromažďování tohoto klíče. Ale s efemeronem zachází speciálně sběrač odpadků. Hodnotové pole není vysledováno, dokud se nezjistí, že klíč je dosažitelný z jiných kořenů systému než prostřednictvím klíčů efemeron. Sada efemeronů, jejichž klíče jsou přístupné pouze z klíčů efemeronů, se poté drží klíčů, které jsou připraveny k vyzvednutí; tyto objekty nejsou dosažitelné z kořenů, kromě prostřednictvím efemeronů. Když garbage collector detekuje takovou sadu, jsou efemerony zařazeny do fronty na oznámení a jsou sledovány jejich klíče a hodnoty. Proto efemerony detekují objekty, které jsou připraveny ke sběru, a přerušují cykly, které mohou zabránit shromažďování objektů.
Popis
v počítačová věda, finalizace nastane, když a Popelář (GC) informuje aplikaci, že objekt je „téměř sbíratelný“. Používá se k tomu, aby pomohla aplikaci udržovat její invarianty. Slabé reference může být použit garbage collectorem k určení objektů, které jsou téměř sběratelské. Při pohledu na páry klíč – hodnota je hlavním rozdílem mezi slabými referencemi a efemerony způsob, jakým s nimi zachází sběrač odpadků. U slabých odkazů se garbage collector vždy řídí hodnotou v páru klíč – hodnota. U efemeronů místo toho sběrač odpadků nenásleduje hodnotu, ale zařadí ephemeron do dalšího pozorování ve druhé fázi: po dokončení první fáze trasování prochází frontou při pohledu na každý efemeron a pokud byl jeho klíč viděn, pak sleduje jeho hodnotu. Tento jemný rozdíl ovlivňuje grafy s některými druhy cyklů, kde slabé páry nepopisujte správně, že předmět by měl být „téměř sběratelský“. Zvažte například pár klíč – hodnota se slabými odkazy, kde klíčem je objekt a hodnotou je sada vlastností připojených k objektu. Očekává se, že až bude objekt připraven ke sběru, vlastnosti také zmizí. Pokud se ale hodnota, případně přechodně, mapuje na vlastní klíč (objekt), pak se objekt nikdy neshromáždí. Pokud by byl místo toho použit efemeron, hodnota by nebyla dodržena, pokud by se objekt neukázal jako živý, což by vyřešilo cyklus. Efemerony jsou podobné slabým párům, ale objekt v klíčovém poli efemeronu lze klasifikovat jako „téměř sběratelský“, i když je dosažitelný z hodnotových polí efemeronu.[1]
Použití
Ephemeron je objekt, který silně odkazuje na svůj obsah, pokud klíč ephemeronu není shromažďován odpadky a od té doby slabě. Efemerony řeší problém, který se běžně vyskytuje při pokusu o „připojení“ vlastností k objektům pomocí registru. Když by měla být k objektu připojena nějaká vlastnost, měla by mít vlastnost (pokud jde o chování GC) obvykle životnost, kterou by měla proměnná instance tohoto objektu. To je však komplikováno tím, že máme externí přidružení mezi objektem a jeho vlastností, jako například:
vlastnost --------- registr --------- sdružení --------- objekt
Zde bude registr (třetí strana) držet samotné přidružení, což by vyžadovalo ruční odstranění z registru (namísto automatizovaného sběru odpadu). I když tento problém lze vždy vyřešit v dané konkrétní situaci pomocí jednoho z různých slabých typů asociací, výběr „správného“ druhu asociace závisí na řadě faktorů, z nichž některé se mohou dynamicky měnit.
Efemerony tento problém řeší definováním, že „obsah“ (hodnota) efemeronu bude silně držen, dokud nebude známo, že klíč je shromažďován. Od té doby bude obsah efemeronu držen slabě. Proto se obsah efemeronu může stát způsobilým pro uvolňování paměti právě tehdy, když je klíč uvolnitelný, což je přesné chování, které bychom pozorovali pro proměnnou instance objektu.
Dějiny
Ephemerony poprvé vynalezl George Bosworth, když pracoval ve společnosti Digitalk.[1] Byly použity jako finalizace mechanismus v Vizuální Smalltalk Enterprise. Dnes jsou efemerony k dispozici ve většině Pokec dialekty i mnoho dalších jazyků s automatickým sběrem odpadků.
Příklady použití
Pokec
Několik dialektů Smalltalk zahrnuje efemerony jako vestavěné funkce nebo jako další balíčky. Například, GNU Smalltalk[2] a Kvičet.[3]
Lua
Lua neobsahuje samostatnou konstrukci ephemeron, ale její datové struktury tabulky mohou být nastaveny tak, aby držely své klíče, hodnoty nebo obojí slabým způsobem. Pokud jsou klíče drženy slabě, ale hodnoty jsou drženy silně, tabulka bude fungovat jako pomíjivý.[4]
.SÍŤ
Jazyky jako C#, F#, a VB.NET, do .NET Framework 4.0, mít podporu v Podmíněná slabá tabulka třída.[5] Základní mechanismus efemeronů (DependentHandle) je soukromý.[5]
OCaml
Implementace OCaml typ ephemeron byl představen v roce 2014[6] a přidán do standardní knihovny ve verzi 4.03.[7]
Raketa
The Raketa dialekt Lisp má podporu pro efemerony ve svém běhovém systému. Tam se efemerony používají v kombinaci se slabými mapováními, aby sběratel odpadu uvolnil páry klíč – hodnota, i když hodnota obsahuje odkaz na klíč.[8]
Reference
- ^ A b Barry Hayes (1997). „Ephemerons: Nový finalizační mechanismus“. Objektově orientované jazyky, programování, systémy a aplikace.
- ^ "Speciální objekty - Uživatelská příručka GNU Smalltalk". Citováno 20. února 2013.
- ^ "Ephemerons". Citováno 20. února 2013.
- ^ „Lua 5.2 Reference Manual“. Citováno 20. února 2013.
- ^ A b „.NET 4.0 - System.Runtime.CompilerServices.ConditionalWeakTable“. Weblog IKVM.NET. Citováno 14. října 2013.
- ^ Bobot, François. „Ephemerons meet OCaml GC“ (PDF). Workshop uživatelů a vývojářů OCaml 2014. Citováno 5. dubna 2018.
- ^ Minsky, Yarone. „OCaml 4.03: Vše ostatní“. Blog blogu Jane Street Tech. Citováno 5. dubna 2018.
- ^ „15.2 Ephemerons“. Citováno 20. února 2013.