Aluepohjainen muistinhallinta

Aluepohjainen muistinhallinta  on tapa hallita muistia , jossa jokainen muistiin luotu objekti osoitetaan tietylle "alueelle".

Alue, jota kutsutaan myös vyöhykkeeksi, areenaksi [1] , alueeksi tai muistikontekstiksi, on joukko allokoituja objekteja, jotka voidaan vapauttaa tehokkaasti samanaikaisesti. Samoin kuin pinopohjainen muistinhallinta, aluepohjainen muistinhallinta helpottaa muistin varaamista ja purkamista, mikä mahdollistaa sen suorittamisen minimaalisella ylimääräisellä kulutuksella. Mutta verrattuna pinoon, muistinhallinta alueiden avulla voi olla joustavampaa: ne antavat objektien elää pidempään kuin pinokehyksessä. Tyypillisissä toteutuksissa kaikki samalla alueella olevat objektit allokoidaan samalla vierekkäisellä muistiosoitteiden alueella, samalla tavalla kuin pinokehykset tyypillisesti allokoidaan.

Edut

Pinopohjaiseen muistin varaamiseen verrattuna aluepohjainen muistinhallinta mahdollistaa luonnollisemman tavan toteuttaa muistin varaus rinnakkaisohjelmoinnissa. Lisäksi alueet helpottavat suuresti työtä virtualisoinnin ja erilaisten muistin suorituskyvyn optimointitekniikoiden kanssa, mikä yksinkertaistaa tehtävää siirtää kaikki samaan alueeseen kuuluvat objektit samanaikaisesti muistiin, jossa on nopeampi tai hitaampi pääsy [2] .

Esimerkki

Tarkastellaan yksinkertaisena esimerkkinä seuraavaa C -koodia , joka varaa ja vapauttaa tietorakenteen, kuten linkitetyn luettelon :

Alue * r = luoAlue (); ListSolmu * head = NULL ; for ( int i = 1 ; i <= 1000 ; i ++ ) { ListNode * newNode = allocateFromRegion ( r , sizeof ( ListNode )); newNode -> next = head ; head = newNode ; } // ... // (käytä luetteloa tässä) // ... tuhotaRegion ( r );

Vaikka linkitetyn luettelon luominen vei monia toimintoja, se voidaan nopeasti tuhota yhdellä toiminnolla, jolloin alue vapautuu, johon luettelon kohteet sijoitettiin. Listaa ei tarvitse skannata ja poistaa sen elementtejä yksitellen.

Toteutus

Yksinkertaiset selkeät alueet on helppo toteuttaa; seuraava kuvaus perustuu David Hansonin artikkeliin [ 3 ] . Jokainen alue on toteutettu linkitettynä luettelona suurista muistilohkoista; jokaisen lohkon on oltava riittävän suuri varaamaan muistia monille sen sisällä oleville objekteille. Aluetietorakenne sisältää osoittimen lohkon seuraavaan vapaaseen paikkaan, ja jos lohko on täynnä, muistinhallintajärjestelmä varaa uuden lohkon ja lisää sen listaan. Kun alue vapautetaan, seuraava vapaan sijainnin osoitin palautetaan ensimmäisen lohkon alkuun, ja koko jo luotujen lohkojen luetteloa voidaan käyttää uudelleen alueen sisällä olevien objektien sijoittamiseen. Vaihtoehtoisessa toteutuksessa, kun alue vapautetaan, sille allokoitujen lohkojen lista voidaan palauttaa globaaliin vapaalistaan, josta muut alueet voivat myöhemmin allokoida uusia lohkoja. Tällaisen yksinkertaisen menetelmän puitteissa ei kuitenkaan ole mahdollista vapauttaa muistia yksitellen tietyistä lohkon objekteista.

Ylärasite varattua tavua kohden on erittäin alhainen tälle järjestelmälle. Melkein kaikki muistinvarausjaksot sisältävät vain osoittimen vertailun ja päivittämisen seuraavaan vapaaseen paikkaan. Ainoat poikkeukset ovat jaksot, joissa lohkon muisti loppuu ja muistinhallinnan on liitettävä uusi lohko alueelle. Alueen vapauttaminen on määräaikainen toimenpide, jota suoritetaan harvoin. Toisin kuin tyypillisissä roskankeräysjärjestelmissä , aluepohjaisen tiedonhallinnan ei tarvitse merkitä jokaista tietoobjektia sen tyypillä .

Historia ja käsitteet

Alueiden käsite on hyvin vanha. Se otettiin ensimmäisen kerran käyttöön vuonna 1967 Douglas Ross AED-ilmaistallennuspaketissa , jossa muisti jaettiin vyöhykehierarkiaan. Jokaiselle vyöhykkeelle muistinhallinnan kurinalaisuus voidaan konfiguroida erikseen. Jokainen vyöhyke voidaan vapauttaa yhdellä yhteisellä toiminnolla. Näin ollen tässä ohjelmistopaketissa Ross toteutti ensimmäistä kertaa käytännössä aluepohjaisen muistinhallinnan konseptin [4] . Vuonna 1976 AREA-tietotyyppi sisällytettiin tietorakenteiden ryhmähallinnan PL/I -kielistandardiin [5] . Vuonna 1990 Hanson osoitti, että nimenomaisesti määritellyt C:n alueet (joita hän kutsui areenoiksi) muistinhallinnassa voivat tarjota suorituskykyä, mitattuna käytettynä aikana varattua tavua kohden, mikä ylittää jopa nopeimman tunnetun kasan allokointimekanismin [3] . Eksplisiittisillä alueilla oli tärkeä rooli useiden varhaisten C-pohjaisten ohjelmistoprojektien kehityksessä, mukaan lukien Apache HTTP Server , jossa niitä kutsutaan pooleiksi, ja PostgreSQL , jossa niitä kutsutaan muistikonteksteiksi [6] . Kuten perinteinen keon allokointi, nämä järjestelmät eivät tarjoa muistin käytön suojausta ; ohjelmoija voi käyttää muistialuetta sen jälkeen, kun se on vapautettu riippuvan linkin kautta tai unohtaa vapauttaa alueen, mikä johtaa muistivuotoon .

Alueiden johtaminen

Vuonna 1988 tutkijat alkoivat tutkia, miten alueita voidaan käyttää turvalliseen muistin varaamiseen, ja otettiin käyttöön aluepäätelmän käsite . Osana tätä tekniikkaa kääntäjä lisää koodiin käännösvaiheessa alueiden allokointi- ja vapauttamisohjeet sekä yksittäiset muistipaikalliset objektit, jotka on staattisesti linkitetty tiettyyn alueeseen. Kääntäjä osaa tehdä tämän niin, että se voi taata roikkuvien osoittimien ja muistivuotojen puuttumisen. Varhaisessa työssä Ruggieri ja Murtagh tutkivat tämän tekniikan muunnelmaa, jossa alue luodaan, kun jokainen toiminto suoritetaan ja vapautetaan, kun se on valmis [7] . Tehdessään niin he käyttivät tietovirta- analyysiä määrittääkseen kunkin staattisesti varatun muistiobjektin käyttöiän ja sitten määrittäneet kyseisen objektin allokoitaviksi nuorimmalle alueelle luontiajan mukaan, joka sisältää objektit, joilla on sama elinikä. Vuonna 1994 tämä työ tiivistettiin Toften ja Talpinin alkuperäisteoksissa, jotka laajensivat Ruggierin ja Murtaghin ehdottamaa tekniikkaa tukemaan korkeamman asteen tyyppi- ja funktiopolymorfismia Standard ML -toiminnallisessa ohjelmointikielessä . Toften ja Talpinin työssä käytettiin erilaista tyyppipäätelmään sekä aluetyyppien ja aluelaskennan teoreettisiin käsitteisiin perustuvaa algoritmia [ 8 ] [9] . He ehdottivat lambda-laskennan laajentamista sisältäen alueet erityisenä kokonaisuutena. Itse asiassa he lisäsivät seuraavat kaksi rakennetta lambda-laskentaan:

e 1 at ρ: laske lausekkeen e 1 tulos ja tallenna se alueelle ρ; letregion ρ in e2 end: luo alue ja linkitä se ρ:hen; laske e 2 ja vapauta sitten alue.

Tämän syntaktisen rakenteen vuoksi alueet ovat "sisäkkäisiä", mikä tarkoittaa, että jos r 2 luodaan r1:n jälkeen , se on myös vapautettava ennen r1: tä . Tuloksena on "pino" alueita. Lisäksi alueet on vapautettava samassa funktiossa, jossa ne luodaan. Aiken ym. lievensivät osittain rajoituksia [10]

Tämä laajennettu lambda-laskenta oli tarkoitettu toimimaan todistettavasti muistiturvallisena väliesityksenä standardi- ML - ohjelmien kääntämiseksi konekoodiksi. Kuitenkin sellaisen kääntäjän luominen, joka voisi antaa hyviä tuloksia suurille ohjelmille, kohtasi useita käytännön rajoituksia. Ne jouduttiin ratkaisemaan uudella analyysillä, mukaan lukien työskentely rekursiivisilla kutsuilla, tail -rekursiivisilla kutsuilla ja vain yhden arvon sisältävien alueiden eliminoiminen generoidusta väliesityksestä. Tämä työ valmistui vuonna 1995 [11] . Sen tuloksia käytti ML Kit, ML:n versio, jonka muistinkäsittely perustui alueisiin roskien keräämisen sijaan. ML Kitin tulo mahdollisti kahden keskikokoisten testiohjelmien kokoelman suoran vertailun, mikä antoi hyvin erilaisia ​​tuloksia ("10 kertaa nopeampi ja neljä kertaa hitaampi") riippuen siitä, kuinka "alueystävällinen" tietty testiohjelma oli. oli [12] . ML Kit skaalattiin lopulta suuria sovelluksia varten. Siinä toteutettiin kaksi lisäystä: erillinen moduulien kokoaminen ja hybriditekniikka, joka yhdistää alueen rajojen vähentämisen säännölliseen roskienkeruuun. [13] [14]

Konseptin toteutus muilla ohjelmointikielillä

ML Kitin kehittämisen jälkeen alueita alettiin toteuttaa muille ohjelmointikielille:

  • C -ohjelmointikielen eri laajennuksissa :
    • C:n suojatulla murteella Cyclone , joka lisäsi tuen eksplisiittisille alueille monien muiden ominaisuuksien joukossa. Tämä kieli keskittyi suurelta osin olemassa olevien sovellusten siirtämiseen C:hen ja niiden jalostukseen alueiden käyttöä varten [15] [16] [17] .
    • C:n laajennus, nimeltään RC, toteutti myös eksplisiittisiä alueita [18] . Mutta tämä kieli käyttää aluekohtaista viitelaskentaa muistin turvallisuuden takaamiseksi edelleen varmistamalla, että mitään aluetta ei vapauteta ennenaikaisesti [19] [20] . Alueet vähentävät viitelaskennan yleiskustannuksia, koska sisäiset viittaukset alueisiin eivät edellytä laskurien päivittämistä, kun ne muuttuvat. RC sisältää nimenomaisen staattisen tyyppijärjestelmän alueille, mikä mahdollistaa joidenkin refcount-päivitysten välttämisen [21] .
    • C:n osajoukko nimeltä Control-C edellyttää ohjelmien käyttävän alueita (ja vain yhtä aluetta kulloinkin suorituksen aikana). Kielen kirjoittajat pitävät näitä rajoituksia osana sen suunnittelua staattisen muistin turvallisuuden takaamiseksi [22] .
  • Alueet on toteutettu Java -alajoukolle [23] , ja niistä on tullut kriittinen komponentti muistinhallinnassa Realtime Java -kielessä , joka yhdistää ne omistajuustyyppeihin objektien kapseloinnin hallitsemiseksi ja ajonaikaisten tarkistusten poistamiseksi alueen vapauttamiseksi [24] . [25] [26] . Viime aikoina on ehdotettu puoliautomaattista järjestelmää alueen havaitsemiseksi reaaliaikaisissa sulautetuissa Java-sovelluksissa, jossa yhdistyvät käännösaikainen staattinen analyysi, ajonaikaisesti ohjatut aluevarauskäytännöt ja ohjelmoijalta kääntäjälle -vinkit [27] [28] Alueet soveltuvat hyvin laskemiseen reaaliajassa , koska niiden ylläpidon aikakustannukset ovat staattisesti ennustettavissa ja paljon yksinkertaisempia kuin perinteiset roskakorit.
  • Alueet on toteutettu loogisille ohjelmointikielille Prolog [29] [30] ja Mercury [31] [32] ; näissä toteutuksissa Toften ja Talpinin aluepäätelmämallia on laajennettu backtracking- ja prolog cut -lauseille .
  • Aluepohjaista muistinhallintaa käytetään ParaSail rinnakkaisohjelmointikielessä . Koska ParaSailissa [33] ei ole eksplisiittisiä osoittimia, muistinhallintaa toteutettaessa siihen ei tarvita ylimääräistä viitelaskentamekanismia.

Haitat

Alueita käyttävillä järjestelmillä voi olla ongelmia, joissa alueista tulee hyvin suuria ennen kuin ne vapautuvat, ja siksi ne sisältävät suuren osan kuolleesta datasta. Tällaisia ​​alueita kutsutaan yleensä "muistivuotoiksi" (vaikka ne lopulta vapautuvat). Näiden vuotojen korjaaminen saattaa edellyttää ohjelman uudelleenjärjestelyä. Se tuotetaan yleensä lisäämällä uusia alueita, joilla on lyhyempi käyttöikä. Tämäntyyppisten ongelmien virheenkorjaus on erityisen vaikeaa järjestelmissä, jotka käyttävät aluejohtopäätöstä , jolloin ohjelmoijan on ymmärrettävä järjestelmän taustalla oleva päättelyalgoritmi tai jäsentävä väliesitys yksityiskohtaisesti ongelman diagnosoimiseksi. Ohjelmien virheenkorjaus perinteisillä roskakeräilijöillä on paljon helpompaa, ja vuotojen kohteeksi joutuneen muistin oikea-aikainen vapauttaminen voidaan saavuttaa ilman ohjelman uudelleenjärjestelyä, yksinkertaisesti poistamalla loogiset virheet sen rakentamisessa. Nämä näkökohdat ovat synnyttäneet hybridijärjestelmiä, joissa yhdistyvät aluepohjainen muistinhallinta ja perinteinen roskienkeruu [13] . Toisaalta ohjelmien virheenkorjauksessa roskienkeruulla voi tapahtua myös vuotoja, jos tallennetaan viittauksia tietoihin, joita ei koskaan enää käytetä, ja ohjelmoijan on seurattava tätä tilannetta paljon huolellisemmin kuin aluepohjaisessa järjestelmässä. muistin hallinta.

Aluepohjainen muistinhallinta toimii parhaiten, kun alueiden määrä on suhteellisen pieni ja jokainen alue sisältää paljon objekteja. Ohjelmat, jotka sisältävät paljon harvaa aluetta, kärsivät sisäisestä pirstoutumisesta . Tämä voi lopulta johtaa muistin menettämiseen ja lisäaikaa alueiden hallintaan. Jälleen, kun työskentelet aluetulon kanssa, tämä ongelma voi olla vaikeampi diagnosoida.

Hybriditekniikat

Kuten edellä mainittiin, RC-kieli käyttää hybridimuistinhallintatekniikkaa, joka sisältää alueet ja viitelaskennan . Tämä lähestymistapa vähentää viitelaskennan lisäkustannuksia, koska alueen objektien väliset linkit eivät vaadi laskurien päivittämistä, kun niitä muutetaan, lisätään tai poistetaan. Samoin jotkin aluekoodausta käyttävät hybridimenetelmät yhdistävät roskakeräysobjektin saavutettavuuden seurannan alueiden kanssa. Tällaisiin menetelmiin kuuluu keon jakaminen alueisiin, seurantakierros, joka merkitsee eläviä objekteja sisältävät alueet, ja sitten merkitsemättömien alueiden vapauttaminen. Tämä lähestymistapa edellyttää jatkuvaa muistin eheyttämistä ollakseen tehokas [34] .

Muistiinpanot

  1. venäläisissä lähteissä tätä termiä ei juuri käytetä
  2. Tämä voi olla tarpeen esimerkiksi, jotta kaikki objektit, jotka liittyvät tiettyyn rinnakkaisesti suoritettavan proseduurin esiintymään, voidaan sijoittaa muistiosaan lähelle moniprosessorijärjestelmän tiettyä prosessoria .
  3. 1 2 Hanson, David R. Muistin nopea varaus ja purkaminen objektien eliniän perusteella  //  Ohjelmisto: Practice and Experience : Journal. - 1989. - Voi. 20 , ei. 1 . - s. 5-12 . - doi : 10.1002/spe.4380200104 . Arkistoitu alkuperäisestä 20. lokakuuta 2012.
  4. Ross, Douglas. AED-ilmainen tallennuspaketti  (englanniksi)  // ACM:n viestintä . - 1967. - Voi. 10 , ei. 8 . - s. 481-492 . - doi : 10.1145/363534.363546 .
  5. American National Standards Institute, inc. Amerikan kansallinen standardiohjelmointikieli PL/I  (englanti) . – 1976.
  6. 2010 PostgreSQL Global Development Group. Osa 41.3: Muistinhallinta . PostgreSQL 8.2.15 -dokumentaatio (1996). Haettu 22. helmikuuta 2010. Arkistoitu alkuperäisestä 12. helmikuuta 2010.
  7. Ruggieri, Cristina; Murtagh, Thomas P. (1988). "Dynaamisesti allokoitujen kohteiden elinikäinen analyysi" . POPL '88: 15. ohjelmointikielten periaatteita käsittelevän ACM SIGPLAN-SIGACT -symposiumin julkaisut . New York, NY, USA: ACM. DOI : 10.1145/73560.73585 . Haettu 22. helmikuuta 2010 .
  8. Tofte, Mads; Jean-Pierre Talpin (1993). Pinon allokoinnin teoria polymorfisesti kirjoitetuissa kielissä (tekninen raportti). Tietojenkäsittelytieteen laitos, Kööpenhaminan yliopisto. 93/15. Citeseerissä arkistoitu 21. kesäkuuta 2007.
  9. Tofte, Mads ; Talpin, Jean-Pierre (1994). "Tydetyn kutsun mukaan λ-laskennan toteuttaminen aluepinon avulla" . POPL '94: 21. ACM SIGPLAN-SIGACT -symposiumin aineisto ohjelmointikielten periaatteista . New York, NY, USA: ACM. s. 188&ndash, 201. DOI : 10.1145/174675.177855 . ISBN  0-89791-636-0 . Arkistoitu alkuperäisestä 2014-07-04 . Haettu 15. huhtikuuta 2014 . Käytöstä poistettu parametri |deadlink=( ohje )
  10. Aiken, Alex; Manuel Fähndrich, Raph Levien (1995). Parempi staattisen muistin hallinta: Korkeamman asteen kielten aluepohjaisen analyysin parantaminen (tekninen raportti). EECS-osasto, Kalifornian yliopisto, Berkeley. UCB/CSD-95-866. Citeseerissä arkistoitu 21. kesäkuuta 2007.
  11. Birkedal, Lars ; Tofte, Mads ; Weilstrup, Magnus (1996). "Aluepäätelmästä von Neumannin koneisiin alueen esittelypäätelmän kautta" . POPL '96: 23. ohjelmointikielten periaatteita käsittelevän ACM SIGPLAN-SIGACT -symposiumin julkaisut . New York, NY, USA: ACM. s. 171&ndash, 183. DOI : 10.1145/237721.237771 . ISBN 0-89791-769-3 . Haettu 22. helmikuuta 2010 .  
  12. Tofte, Mads; Birkedal, Lars; Elsman, Martin; Hallenberg, Niels. Retrospective on Region-Based Memory Management // Higher Order Symbolic Computing. - 2004. - T. 17 , nro 3 . S. 245–265 . ISSN 1388-3690 . - doi : 10.1023/B:LISP.0000029446.78563.a4 .
  13. 1 2 Hallenberg, Niels; Elsman, Martin; Tofte, Mads. Alueen päättelyn ja roskien keräämisen yhdistäminen // SIGPLAN-ilmoitukset. - 2003. - T. 37 , nro 5 . S. 141–152 . ISSN 0362-1340 . - doi : 10.1145/543552.512547 .
  14. Elsman, Martin. Roskien keräämisen turvallisuus aluepohjaiseen muistinhallintaan  //  SIGPLAN-ilmoitukset: päiväkirja. - 2003. - Voi. 38 , ei. 3 . s. 123–134 . ISSN 0362-1340 . - doi : 10.1145/640136.604190 .
  15. Sykloni: Johdatus alueisiin . Cyclone käyttöopas . Haettu 22. helmikuuta 2010. Arkistoitu alkuperäisestä 21. elokuuta 2010.
  16. Grossman, Dan; Morrisett, Greg; Jim, Trevor; Hicks, Michael; Wang, Yanling. Aluepohjainen muistinhallinta syklonissa // SIGPLAN Notices. - 2002. - T. 37 , nro 5 . S. 282–293 . - doi : 10.1145/543552.512563 .
  17. Hicks, Michael; Morrisett, Greg ; Grossman, Dan (2004). "Kokemus turvallisesta manuaalisesta muistinhallinnasta syklonissa" . ISMM '04: 4. kansainvälisen muistinhallintaa käsittelevän symposiumin aineistoa . New York, NY, USA: ACM. s. 73&ndash, 84. DOI : 10.1145/1029873.1029883 . ISBN 1-58113-945-4 . Haettu 22. helmikuuta 2010 .  
  18. Gay, David RC - Turvallinen, aluepohjainen muistinhallinta C:lle (downlink) . David Gayn kotisivut . Intel Labs Berkeley (1999). Haettu 22. helmikuuta 2010. Arkistoitu alkuperäisestä 26. helmikuuta 2009. 
  19. Homo, David ; Aiken, Alex (1998). "Muistinhallinta eksplisiittisillä alueilla" . PLDI '98: Ohjelmointikielen suunnittelua ja toteutusta käsittelevän ACM SIGPLAN 1998 -konferenssin julkaisut . New York, NY, USA: ACM. s. 313&ndash, 323. DOI : 10.1145/277650.277748 . ISBN 0-89791-987-4 . Haettu 22. helmikuuta 2010 .  
  20. Gay, David Edward (2001). Muistinhallinta eksplisiittisillä alueilla (PDF) (Tietokonetieteen tohtorin tutkielma). Kalifornian yliopisto Berkeleyssä. Arkistoitu (PDF) alkuperäisestä 2019-09-07 . Haettu 20. helmikuuta 2010 . Käytöstä poistettu parametri |deadlink=( ohje )
  21. Homo, David ; Aiken, AlexKielituki alueille // SIGPLAN-ilmoitukset. - 2001. - T. 36 , nro 5 . - S. 70-80 . — ISSN 0362-1340 . - doi : 10.1145/381694.378815 .
  22. Kowshik, Sumant; Dhurjati, Dinakar; Adve, Vikram (2002). "Kooditurvallisuuden varmistaminen ilman reaaliaikaisten ohjausjärjestelmien ajonaikaisia ​​tarkastuksia" . CASES '02: Vuoden 2002 sulautettujen järjestelmien kääntäjiä, arkkitehtuuria ja synteesiä käsittelevän kansainvälisen konferenssin julkaisut . New York, NY, USA: ACM. s. 288&ndash, 297. DOI : 10.1145/581630.581678 . ISBN 1-58113-575-0 . Haettu 22. helmikuuta 2010 .  
  23. Christiansen, Morten V. (1998). Aluepohjainen muistinhallinta Java-kielellä (Masters in Computer Science -tutkielma). Tietojenkäsittelytieteen laitos (DIKU), Kööpenhaminan yliopisto . Haettu 20. helmikuuta 2010 .  (linkki ei saatavilla)
  24. Beebee, William S.; Rinard, Martin C. (2001). "Soveltuvan muistin toteutus reaaliaikaiselle Javalle" . EMSOFT '01: Ensimmäisen kansainvälisen sulautettuja ohjelmistoja käsittelevän työpajan julkaisuja . Lontoo, Iso-Britannia: Springer-Verlag. s. 289&ndash, 305. ISBN  3-540-42673-6 . Haettu 22. helmikuuta 2010 . (linkki ei saatavilla)
  25. Sălcianu, Alexandru; Chandrasekhar Boyapati, William Beebee, Jr., Martin Rinard (2003). Tyyppijärjestelmä turvalliseen aluepohjaiseen muistinhallintaan Real-Time Javassa (PDF) (tekninen raportti). MIT:n tietojenkäsittelytieteen laboratorio. MIT-LCS-TR-869. Arkistoitu (PDF) alkuperäisestä 28.09.2021 . Haettu 29.04.2020 . Käytöstä poistettu parametri |deadlink=( ohje )
  26. Boyapati, Chandrasekhar ; Salcianu, Alexandru ; Beebee, Jr., William (2003). "Omistajuustyypit turvalliseen aluepohjaiseen muistinhallintaan reaaliaikaisessa Javassa" . PLDI '03: Ohjelmointikielen suunnittelua ja toteutusta käsittelevän ACM SIGPLAN 2003 -konferenssin julkaisut . New York, NY, USA: ACM. s. 324&ndash, 337. DOI : 10.1145/781131.781168 . ISBN 1-58113-662-5 . Haettu 22. helmikuuta 2010 .  
  27. Nahkli, Chaker ; Rippert, Christophe ; Salagnac, Guillaume ; Yovine, Sergio (2007). "Tehokas aluepohjainen muistinhallinta resurssirajoitteisille reaaliaikaisille sulautetuille järjestelmille" (PDF) . Proceedings of "Workshop on Implementation, Compilation, Optimization of Object-Oriented Languages, Programs and Systems (ICOOOLPS'2006)" . Arkistoitu (PDF) alkuperäisestä 26.02.2012 . Haettu 22. helmikuuta 2010 . Käytöstä poistettu parametri |deadlink=( ohje )
  28. Salagnac, Guillaume ; Rippert, Christophe (2007). "Puoliautomaattinen aluepohjainen muistinhallinta reaaliaikaisille Java sulautetuille järjestelmille". RTCSA '07: 13. kansainvälisen IEEE:n sulautettuja ja reaaliaikaisia ​​tietokonejärjestelmiä ja sovelluksia käsittelevän konferenssin julkaisuja . Washington, DC, USA: IEEE Computer Society. s. 73&ndash, 80. DOI : 10.1109/RTCSA.2007.67 . ISBN 978-0-7695-2975-2 .  
  29. Makholm, Henning (2000). Aluepohjainen muistinhallinta Prologissa (PDF) (Masters in Computer Science -työ). Kööpenhaminan yliopisto, Tanska. Arkistoitu alkuperäisestä (PDF) 5. kesäkuuta 2011 . Haettu 20. helmikuuta 2010 .
  30. Makholm, Henning (2000). "Aluepohjainen muistinhallinta prologille" . ISMM '00: 2. kansainvälisen muistinhallintaa käsittelevän symposiumin aineistoa . New York, NY, USA: ACM. s. 25&ndash, 34. DOI : 10.1145/362422.362434 . ISBN 1-58113-263-8 . Haettu 22. helmikuuta 2010 .  
  31. Phan, Quan ; Janssens, GerdaMerkuriuksen staattinen alueanalyysi. - Springer Berlin / Heidelberg, 2007. - T. 4670/2007. — S. 317–332. — (Luentomuistiinpanot tietojenkäsittelytieteestä). - ISBN 978-3-540-74608-9 . - doi : 10.1007/978-3-540-74610-2 .
  32. Phan, Quan ; Somogyi, Zoltan (2008). "Ajonaikainen tuki Mercuryn aluepohjaiselle muistinhallintalle" . ISMM '08: 7. kansainvälisen muistinhallintaa käsittelevän symposiumin julkaisut . New York, NY, USA: ACM. s. 61&ndash, 70. DOI : 10.1145/1375634.1375644 . ISBN  978-1-60558-134-7 . Arkistoitu alkuperäisestä 2018-06-01 . Haettu 15. huhtikuuta 2014 . Käytöstä poistettu parametri |deadlink=( ohje )
  33. Taft, Tucker Osoittimeton polku oliosuuntautuneeseen rinnakkaisohjelmointiin . ParaSail-blogi (2012). Haettu 14. syyskuuta 2012. Arkistoitu alkuperäisestä 13. elokuuta 2012.
  34. Blackburn, Stephen M .; McKinley, Kathryn S. (2008). "Immix: alueen jätteenkerääjä, jossa on tilaa tehokkaasti, nopea keräys ja mutaattorin suorituskyky . " PLDI '08: Proceedings of 2008 ACM SIGPLAN -konferenssissa ohjelmointikielen suunnittelusta ja toteutuksesta . New York, NY, USA: ACM. s. 22&ndash, 32. DOI : 10.1145/1375581.1375586 . ISBN  978-1-59593-860-2 . Arkistoitu alkuperäisestä 19.11.2018 . Haettu 15. huhtikuuta 2014 . Käytöstä poistettu parametri |deadlink=( ohje )