![Page 1: AA 2016-2017 27. Garbage collec - Dipartimento di Informaticapages.di.unipi.it/ferrari/CORSI/PR2/LEZIONI2017/PR2027.pdf · o ogge di dimensioni variabili o ogge con vita non LIFO](https://reader035.vdocuments.pub/reader035/viewer/2022063017/5fd8f52b0b3f9453ba6d4dd9/html5/thumbnails/1.jpg)
27.Garbagecollec.onAA2016-2017
1
![Page 2: AA 2016-2017 27. Garbage collec - Dipartimento di Informaticapages.di.unipi.it/ferrari/CORSI/PR2/LEZIONI2017/PR2027.pdf · o ogge di dimensioni variabili o ogge con vita non LIFO](https://reader035.vdocuments.pub/reader035/viewer/2022063017/5fd8f52b0b3f9453ba6d4dd9/html5/thumbnails/2.jpg)
Ges,onedellamemoria
Sta,careao dimensionefissa,contenu,determina,ealloca,acompilazione
Run-,mestacko dimensionevariabile(recordaBvazione)o ges,onesoEoprogrammi Heapo dimensionefissa/variabileo supportoallaallocazionedioggeBestruEureda,dinamiche! mallocinC,newinJava
2
![Page 3: AA 2016-2017 27. Garbage collec - Dipartimento di Informaticapages.di.unipi.it/ferrari/CORSI/PR2/LEZIONI2017/PR2027.pdf · o ogge di dimensioni variabili o ogge con vita non LIFO](https://reader035.vdocuments.pub/reader035/viewer/2022063017/5fd8f52b0b3f9453ba6d4dd9/html5/thumbnails/3.jpg)
Allocazionesta,ca
En,tàchehaunindirizzoassolutocheèmantenutopertuEal’esecuzionedelprogramma Solitamentesonoalloca,sta,camenteo variabiliglobalio variabililocalisoEoprogrammi(senzaricorsione)o costan,determinabiliatempodicompilazioneo tabelleusatedalsupportoarun-,me(pertypechecking,garbagecollec,on,ecc.)
SpessousateinzoneproteEedimemoria
3
![Page 4: AA 2016-2017 27. Garbage collec - Dipartimento di Informaticapages.di.unipi.it/ferrari/CORSI/PR2/LEZIONI2017/PR2027.pdf · o ogge di dimensioni variabili o ogge con vita non LIFO](https://reader035.vdocuments.pub/reader035/viewer/2022063017/5fd8f52b0b3f9453ba6d4dd9/html5/thumbnails/4.jpg)
Allocazionesta,capersoEoprogrammi
Registri salvati
Informazione debugging
Spesso nei registri
4
![Page 5: AA 2016-2017 27. Garbage collec - Dipartimento di Informaticapages.di.unipi.it/ferrari/CORSI/PR2/LEZIONI2017/PR2027.pdf · o ogge di dimensioni variabili o ogge con vita non LIFO](https://reader035.vdocuments.pub/reader035/viewer/2022063017/5fd8f52b0b3f9453ba6d4dd9/html5/thumbnails/5.jpg)
Allocazionedinamica:pila
PerogniistanzadiunsoEoprogrammaarun-,meabbiamounrecorddiaBvazionecontenenteleinformazionirela,veataleistanza Analogamente,ognibloccohaunsuorecorddiaBvazione(piùsemplice) Ancheinunlinguaggiosenzaricorsionepuòessereu,leusarelapilaperrisparmiarememoria...
5
![Page 6: AA 2016-2017 27. Garbage collec - Dipartimento di Informaticapages.di.unipi.it/ferrari/CORSI/PR2/LEZIONI2017/PR2027.pdf · o ogge di dimensioni variabili o ogge con vita non LIFO](https://reader035.vdocuments.pub/reader035/viewer/2022063017/5fd8f52b0b3f9453ba6d4dd9/html5/thumbnails/6.jpg)
Allocazionedinamicaconheap
Heap:regionedimemoriaicuiblocchidimemoriapossonoesserealloca,edealloca,inmomen,arbitrari
NecessarioquandoillinguaggiopermeEeo allocazioneesplicitadimemoriaarun-,meo oggeBdidimensionivariabilio oggeBconvitanonLIFO
Lages,onedelloheapnonèbanaleo ges,oneefficientedellospazio:frammentazioneo velocitàdiaccesso
6
![Page 7: AA 2016-2017 27. Garbage collec - Dipartimento di Informaticapages.di.unipi.it/ferrari/CORSI/PR2/LEZIONI2017/PR2027.pdf · o ogge di dimensioni variabili o ogge con vita non LIFO](https://reader035.vdocuments.pub/reader035/viewer/2022063017/5fd8f52b0b3f9453ba6d4dd9/html5/thumbnails/7.jpg)
Heap:blocchididimensionefissa
7
Heapsuddivisoinblocchididimensionefissa(abbastanzalimitata).Inizialmente:tuAiblocchicollega.nellalistalibera
![Page 8: AA 2016-2017 27. Garbage collec - Dipartimento di Informaticapages.di.unipi.it/ferrari/CORSI/PR2/LEZIONI2017/PR2027.pdf · o ogge di dimensioni variabili o ogge con vita non LIFO](https://reader035.vdocuments.pub/reader035/viewer/2022063017/5fd8f52b0b3f9453ba6d4dd9/html5/thumbnails/8.jpg)
Heap:blocchididimensionefissa
8
Allocazionediunoopiùblocchicon.guiDeallocazione:res.tuzioneallalistalibera
![Page 9: AA 2016-2017 27. Garbage collec - Dipartimento di Informaticapages.di.unipi.it/ferrari/CORSI/PR2/LEZIONI2017/PR2027.pdf · o ogge di dimensioni variabili o ogge con vita non LIFO](https://reader035.vdocuments.pub/reader035/viewer/2022063017/5fd8f52b0b3f9453ba6d4dd9/html5/thumbnails/9.jpg)
Heap:blocchididimensionevariabile
Inizialmenteunicoblocconelloheap Allocazione:determinazionediunbloccoliberodelladimensioneopportuna Deallocazione:res,tuzioneallalistalibera
Problemi:o leoperazionidevonoessereefficien,o evitarelosprecodimemoria
! frammentazioneinterna! frammentazioneesterna
9
![Page 10: AA 2016-2017 27. Garbage collec - Dipartimento di Informaticapages.di.unipi.it/ferrari/CORSI/PR2/LEZIONI2017/PR2027.pdf · o ogge di dimensioni variabili o ogge con vita non LIFO](https://reader035.vdocuments.pub/reader035/viewer/2022063017/5fd8f52b0b3f9453ba6d4dd9/html5/thumbnails/10.jpg)
Frammentazione
Frammentazioneinternao lospaziorichiestoèXo vieneallocatounbloccodi
dimensioneY>X
o lospazioY-Xèsprecato Frammentazioneesternao cisarebbelospazio
necessariomaèinusabileperchésuddivisoin“pezzi”troppopiccoli
10
![Page 11: AA 2016-2017 27. Garbage collec - Dipartimento di Informaticapages.di.unipi.it/ferrari/CORSI/PR2/LEZIONI2017/PR2027.pdf · o ogge di dimensioni variabili o ogge con vita non LIFO](https://reader035.vdocuments.pub/reader035/viewer/2022063017/5fd8f52b0b3f9453ba6d4dd9/html5/thumbnails/11.jpg)
Ges,onedellalistalibera
Inizialmenteunsoloblocco,delladimensionedelloheap Adognirichiestadiallocazionecercabloccodidimensioneopportunao firstfit:primobloccograndeabbastanzao bestfit:quellodidimensionepiùpiccola,grandeabbastanza
Seilbloccosceltoèmoltopiùgrandediquellocheservevienedivisoindueelaparteinu,lizzataèaggiuntaallaLL
Quandounbloccoède-allocato,vieneres,tuitoallaLL(seunbloccoadiacenteèliberoidueblocchisono``fusi’’inununicoblocco)
11
![Page 12: AA 2016-2017 27. Garbage collec - Dipartimento di Informaticapages.di.unipi.it/ferrari/CORSI/PR2/LEZIONI2017/PR2027.pdf · o ogge di dimensioni variabili o ogge con vita non LIFO](https://reader035.vdocuments.pub/reader035/viewer/2022063017/5fd8f52b0b3f9453ba6d4dd9/html5/thumbnails/12.jpg)
Ges,oneheap
FirstfitoBestfit?SolitasituazioneconfliEuale…o Firstfit:piùveloce,occupazionememoriapeggiore
o Bestfit:piùlento,occupazionememoriamigliore
ConunicaLLcostoallocazionelinearenelnumerodiblocchiliberi Permigliorarelisteliberemul,ple:laripar,zionedeiblocchifralevarielistepuòessere
! sta,ca! dinamica
12
![Page 13: AA 2016-2017 27. Garbage collec - Dipartimento di Informaticapages.di.unipi.it/ferrari/CORSI/PR2/LEZIONI2017/PR2027.pdf · o ogge di dimensioni variabili o ogge con vita non LIFO](https://reader035.vdocuments.pub/reader035/viewer/2022063017/5fd8f52b0b3f9453ba6d4dd9/html5/thumbnails/13.jpg)
Problema:iden,ficazionedeiblocchidade-allocare
NellaLLvannoreinseri,iblocchidade-allocare Comevengonoindividua,?o linguaggiconde-allocazioneesplicita(,pofree):seppuntaastruEurada,,freepde-allocalamemoriachecon,enelastruEura
o linguaggisenzade-allocazioneesplicita:unaporzionedimemoriaèrecuperabilesenonèpiùraggiungibile“innessunmodo”
Ilprimomeccanismoèpiùsemplice,malascialaresponsabilitàalprogrammatore,epuòcausareerrori(danglingpointer) Ilsecondomeccanismorichiedeunopportunomodellodellamemoriaperdefinire“raggiungibilità”
13
![Page 14: AA 2016-2017 27. Garbage collec - Dipartimento di Informaticapages.di.unipi.it/ferrari/CORSI/PR2/LEZIONI2017/PR2027.pdf · o ogge di dimensioni variabili o ogge con vita non LIFO](https://reader035.vdocuments.pub/reader035/viewer/2022063017/5fd8f52b0b3f9453ba6d4dd9/html5/thumbnails/14.jpg)
Ges,onememoria
I“moderni”linguaggidiprogrammazioneassumonounmodellodiges,oneautoma,cadellamemoriaaheapEsempio(daOCAML)o letrecappendxy=ifx=[]theny
elsehdx::append(tlx)yletrecrevls=ifls=[]then[] elseappend(rev(tlls))[hdls]
o Assumiamochelength(ls)=10,cosasuccedequandorev(ls)èinvocata?
14
![Page 15: AA 2016-2017 27. Garbage collec - Dipartimento di Informaticapages.di.unipi.it/ferrari/CORSI/PR2/LEZIONI2017/PR2027.pdf · o ogge di dimensioni variabili o ogge con vita non LIFO](https://reader035.vdocuments.pub/reader035/viewer/2022063017/5fd8f52b0b3f9453ba6d4dd9/html5/thumbnails/15.jpg)
Modelloagrafodellamemoria
Ènecessariodeterminareilrootset,cioèl’insiemedeida,sicuramente“aBvi”o Javarootset=variabilista,che+variabileallocatesulrun-,mestack
PerognistruEurada,allocata(nellostackenelloheap)occorresaperedovecipossonoesserepuntatoriaelemen,delloheap(informazionepresenteneitypedescriptor) Reachableac2vedata:lachiusuratransi,vadelgrafoapar,redalleradici,cioètuBida,raggiungibiliancheindireEamentedalrootsetseguendoipuntatori
15
![Page 16: AA 2016-2017 27. Garbage collec - Dipartimento di Informaticapages.di.unipi.it/ferrari/CORSI/PR2/LEZIONI2017/PR2027.pdf · o ogge di dimensioni variabili o ogge con vita non LIFO](https://reader035.vdocuments.pub/reader035/viewer/2022063017/5fd8f52b0b3f9453ba6d4dd9/html5/thumbnails/16.jpg)
Celle,“liveness”,blocchiegarbage
Cella=bloccodimemoriasulloheap UnacellavienedeEaliveseilsuoindirizzoèmemorizzatoinunaradiceoinunaaltracellaliveo quindi:unacellaèliveseesoloseappar,eneaiReachableac)vedata
Unacellaègarbagesenonèlive Garbagecollec,on(GC):aBvitàdiges,onedellamemoriadinamicaconsistentenell’individuarelecellegarbage(o“ilgarbage”)erenderleriu,lizzabili,peres.inserendolenellaListaLibera16
![Page 17: AA 2016-2017 27. Garbage collec - Dipartimento di Informaticapages.di.unipi.it/ferrari/CORSI/PR2/LEZIONI2017/PR2027.pdf · o ogge di dimensioni variabili o ogge con vita non LIFO](https://reader035.vdocuments.pub/reader035/viewer/2022063017/5fd8f52b0b3f9453ba6d4dd9/html5/thumbnails/17.jpg)
Garbageedanglingreference
classnode{intvalue;nodenext;
}nodep,q;
17
p=newnode();q=newnode();q=p;freep;
Dangling reference
garbage
![Page 18: AA 2016-2017 27. Garbage collec - Dipartimento di Informaticapages.di.unipi.it/ferrari/CORSI/PR2/LEZIONI2017/PR2027.pdf · o ogge di dimensioni variabili o ogge con vita non LIFO](https://reader035.vdocuments.pub/reader035/viewer/2022063017/5fd8f52b0b3f9453ba6d4dd9/html5/thumbnails/18.jpg)
GC:perchéèinteressante?
Applicazionimodernesembranononaverelimi,allospaziodimemoriao 4GBlaptop,8GBdesktop,8-512GBservero spaziodiindirizzia64-bit Mal’usoscorreEofaemergereproblemicomeo memoryleak,danglingreference,nullpointerdereferencing,heapfragmenta,on
o problemidiinterazioneconcachingepaginazione Lages.onedellamemoriaesplicitaviolailprincipiodell’astrazionedeilinguaggidiprogrammazione
18
![Page 19: AA 2016-2017 27. Garbage collec - Dipartimento di Informaticapages.di.unipi.it/ferrari/CORSI/PR2/LEZIONI2017/PR2027.pdf · o ogge di dimensioni variabili o ogge con vita non LIFO](https://reader035.vdocuments.pub/reader035/viewer/2022063017/5fd8f52b0b3f9453ba6d4dd9/html5/thumbnails/19.jpg)
GCeastrazionilinguis,che
GCnonèunaastrazionelinguis,ca GCèunacomponentedellamacchinavirtualeo VMdiLisp,Scheme,Prolog,Smalltalk…o VMdiCandC++nonloavevanomalibreriedigarbagecollec,onsonostateintrodoEeperC/C++
Sviluppirecen,delGCo linguaggiOO:Modula-3,Java,C#o linguaggiFunzionali:ML,Haskell,F#
19
![Page 20: AA 2016-2017 27. Garbage collec - Dipartimento di Informaticapages.di.unipi.it/ferrari/CORSI/PR2/LEZIONI2017/PR2027.pdf · o ogge di dimensioni variabili o ogge con vita non LIFO](https://reader035.vdocuments.pub/reader035/viewer/2022063017/5fd8f52b0b3f9453ba6d4dd9/html5/thumbnails/20.jpg)
IlgarbagecollectorperfeEo
NessunimpaEovisibilesull’esecuzionedeiprogrammi Operasuogni,podiprogrammaesuogni,podistruEurada,dinamica(esempio:struEurecicliche)Individuailgarbage(esolamenteilgarbage)inmodoefficienteeveloceNessunoverheadsullages,onedellamemoriacomplessiva(cachingepaginazione)Ges,oneheapefficiente(nessunproblemadiframmentazione)
20
![Page 21: AA 2016-2017 27. Garbage collec - Dipartimento di Informaticapages.di.unipi.it/ferrari/CORSI/PR2/LEZIONI2017/PR2027.pdf · o ogge di dimensioni variabili o ogge con vita non LIFO](https://reader035.vdocuments.pub/reader035/viewer/2022063017/5fd8f52b0b3f9453ba6d4dd9/html5/thumbnails/21.jpg)
QualisonoletecnichediGC?
Referencecoun.ng–Contatoridiriferimentoo ges,onedireEadellecelleliveo lages,oneèassociataallafasediallocazionedellamemoriadinamica
o nonhabisognodideterminarelamemoriagarbage Tracing:iden,ficalecellechesonodiventategarbageo mark-sweepo copycollec.onTecnicaup-to-date:genera.onalGC
21
![Page 22: AA 2016-2017 27. Garbage collec - Dipartimento di Informaticapages.di.unipi.it/ferrari/CORSI/PR2/LEZIONI2017/PR2027.pdf · o ogge di dimensioni variabili o ogge con vita non LIFO](https://reader035.vdocuments.pub/reader035/viewer/2022063017/5fd8f52b0b3f9453ba6d4dd9/html5/thumbnails/22.jpg)
Referencecoun,ng
Aggiungereuncontatorediriferimen,allacelle(numerodicamminidiaccessoaBviversolacella) Overheaddiges,oneo spaziopericontatoridiriferimentoo operazionichemodificanoipuntatoririchiedonoincrementoodecrementodelvaloredelcontatore.
o ges,one“real-,me” Unix(filesystem)usalatecnicadeireferencecountperlages,onedeifile JavaperlaRemoteMethodInvoca,on(RMI) C++“smartpointer”
22
![Page 23: AA 2016-2017 27. Garbage collec - Dipartimento di Informaticapages.di.unipi.it/ferrari/CORSI/PR2/LEZIONI2017/PR2027.pdf · o ogge di dimensioni variabili o ogge con vita non LIFO](https://reader035.vdocuments.pub/reader035/viewer/2022063017/5fd8f52b0b3f9453ba6d4dd9/html5/thumbnails/23.jpg)
Referencecoun,ng
Integeri=newInteger(10);o RC(i)=1.
j=k;(j,kriferisconoaoggeB)o RC(j)--.o RC(k)++.
23
![Page 24: AA 2016-2017 27. Garbage collec - Dipartimento di Informaticapages.di.unipi.it/ferrari/CORSI/PR2/LEZIONI2017/PR2027.pdf · o ogge di dimensioni variabili o ogge con vita non LIFO](https://reader035.vdocuments.pub/reader035/viewer/2022063017/5fd8f52b0b3f9453ba6d4dd9/html5/thumbnails/24.jpg)
Referencecoun,ng:esempio
24
1 root set
Heap space
2
1 1 1
1 1 2
![Page 25: AA 2016-2017 27. Garbage collec - Dipartimento di Informaticapages.di.unipi.it/ferrari/CORSI/PR2/LEZIONI2017/PR2027.pdf · o ogge di dimensioni variabili o ogge con vita non LIFO](https://reader035.vdocuments.pub/reader035/viewer/2022063017/5fd8f52b0b3f9453ba6d4dd9/html5/thumbnails/25.jpg)
Referencecoun,ng:caraEeris,che
Incrementaleo lages,onedellamemoriaèamalgamatadireEamenteconleoperazionidelleprimi,velinguis,che
Faciledaimplementare Coesisteconlages,onedellamemoriaesplicitadaprogramma(esempiomallocefree) Riusodellecellelibereimmediatoo if(RC==0)then<res,tuirelacellaallalistalibera>
25
![Page 26: AA 2016-2017 27. Garbage collec - Dipartimento di Informaticapages.di.unipi.it/ferrari/CORSI/PR2/LEZIONI2017/PR2027.pdf · o ogge di dimensioni variabili o ogge con vita non LIFO](https://reader035.vdocuments.pub/reader035/viewer/2022063017/5fd8f52b0b3f9453ba6d4dd9/html5/thumbnails/26.jpg)
Referencecoun,ng:limitazioni
Overheadspaziotempoo spazioperilcontatoreo lamodificadiunpuntatorerichiedediverseoperazioni
MancataesecuzionediunaoperazionesulvalorediRCpuògeneraregarbage Nonperme6ediges2restru6ureda2concicliinterni
26
![Page 27: AA 2016-2017 27. Garbage collec - Dipartimento di Informaticapages.di.unipi.it/ferrari/CORSI/PR2/LEZIONI2017/PR2027.pdf · o ogge di dimensioni variabili o ogge con vita non LIFO](https://reader035.vdocuments.pub/reader035/viewer/2022063017/5fd8f52b0b3f9453ba6d4dd9/html5/thumbnails/27.jpg)
Referencecoun,ng:cicli
27
1 root set
Heap space
1
1 1 1
1 1 2 memoryleak
![Page 28: AA 2016-2017 27. Garbage collec - Dipartimento di Informaticapages.di.unipi.it/ferrari/CORSI/PR2/LEZIONI2017/PR2027.pdf · o ogge di dimensioni variabili o ogge con vita non LIFO](https://reader035.vdocuments.pub/reader035/viewer/2022063017/5fd8f52b0b3f9453ba6d4dd9/html5/thumbnails/28.jpg)
“Smartpointer”(C++)
28
T* obj: int cnt: 2
object of type T
RefObj<T> *ref
RefObj<T> Ref<T>
RefObj<T> *ref
x
y
sizeof(RefObj<T>) = 8 byte per reference-counter dell’oggetto sizeof(Ref<T>) = 4 byte
• un normale puntatore
![Page 29: AA 2016-2017 27. Garbage collec - Dipartimento di Informaticapages.di.unipi.it/ferrari/CORSI/PR2/LEZIONI2017/PR2027.pdf · o ogge di dimensioni variabili o ogge con vita non LIFO](https://reader035.vdocuments.pub/reader035/viewer/2022063017/5fd8f52b0b3f9453ba6d4dd9/html5/thumbnails/29.jpg)
mark-sweep
Ognicellaprevedespazioperunbitdimarcatura Garbagepuòesseregeneratodalprogramma(nonsonoprevis,interven,preven,vi)L’aBvazionedelGCcausalasospensionedelprogrammainesecuzione Markingo sipartedalrootsetesimarcanolecellelive Sweepo tuEelecellenonmarcatesonogarbageesonores,tuiteallalistalibera.
o resetdelbitdimarcaturasullecellelive
29
![Page 30: AA 2016-2017 27. Garbage collec - Dipartimento di Informaticapages.di.unipi.it/ferrari/CORSI/PR2/LEZIONI2017/PR2027.pdf · o ogge di dimensioni variabili o ogge con vita non LIFO](https://reader035.vdocuments.pub/reader035/viewer/2022063017/5fd8f52b0b3f9453ba6d4dd9/html5/thumbnails/30.jpg)
mark-sweep(1)
30
root set
Heap space
![Page 31: AA 2016-2017 27. Garbage collec - Dipartimento di Informaticapages.di.unipi.it/ferrari/CORSI/PR2/LEZIONI2017/PR2027.pdf · o ogge di dimensioni variabili o ogge con vita non LIFO](https://reader035.vdocuments.pub/reader035/viewer/2022063017/5fd8f52b0b3f9453ba6d4dd9/html5/thumbnails/31.jpg)
mark-sweep(2)
31
root set
Heap space
![Page 32: AA 2016-2017 27. Garbage collec - Dipartimento di Informaticapages.di.unipi.it/ferrari/CORSI/PR2/LEZIONI2017/PR2027.pdf · o ogge di dimensioni variabili o ogge con vita non LIFO](https://reader035.vdocuments.pub/reader035/viewer/2022063017/5fd8f52b0b3f9453ba6d4dd9/html5/thumbnails/32.jpg)
mark-sweep(3)
32
root set
Heap space
![Page 33: AA 2016-2017 27. Garbage collec - Dipartimento di Informaticapages.di.unipi.it/ferrari/CORSI/PR2/LEZIONI2017/PR2027.pdf · o ogge di dimensioni variabili o ogge con vita non LIFO](https://reader035.vdocuments.pub/reader035/viewer/2022063017/5fd8f52b0b3f9453ba6d4dd9/html5/thumbnails/33.jpg)
mark-sweep(4)
33
root set
Heap space
cellemarcate
garbage
![Page 34: AA 2016-2017 27. Garbage collec - Dipartimento di Informaticapages.di.unipi.it/ferrari/CORSI/PR2/LEZIONI2017/PR2027.pdf · o ogge di dimensioni variabili o ogge con vita non LIFO](https://reader035.vdocuments.pub/reader035/viewer/2022063017/5fd8f52b0b3f9453ba6d4dd9/html5/thumbnails/34.jpg)
mark-sweep:valutazione
OperacorreEamentesullestruEurecircolari(+)Nessunoverheaddispazio(+)Sospensionedell’esecuzione(-) Nonintervienesullaframmentazionedelloheap(-)
34
![Page 35: AA 2016-2017 27. Garbage collec - Dipartimento di Informaticapages.di.unipi.it/ferrari/CORSI/PR2/LEZIONI2017/PR2027.pdf · o ogge di dimensioni variabili o ogge con vita non LIFO](https://reader035.vdocuments.pub/reader035/viewer/2022063017/5fd8f52b0b3f9453ba6d4dd9/html5/thumbnails/35.jpg)
Copyingcollec,on
L’AlgoritmodiCheneyèunalgoritmodigarbagecollec,oncheoperasuddividendolamemoriaheapinduepar,o “from-space”e“to-space”
Solamenteunadelleduepar,delloheapèaBva(permeEepertantodiallocarenuovecelle)QuandovieneaBvatoilgarbagecollector,lecellelivevengonocopiatenellasecondaporzionedelloheap(quellanonaBva)o allafinedellaoperazionedicopiairuolitraleduepar,delleheap
vengonoscambia,(lapartenonaBvadiventaaBvaeviceversa)
LecellenellapartenonaBvavengonores,tuiteallalistaliberainununicobloccoevitandoproblemidiframmentazione
35
![Page 36: AA 2016-2017 27. Garbage collec - Dipartimento di Informaticapages.di.unipi.it/ferrari/CORSI/PR2/LEZIONI2017/PR2027.pdf · o ogge di dimensioni variabili o ogge con vita non LIFO](https://reader035.vdocuments.pub/reader035/viewer/2022063017/5fd8f52b0b3f9453ba6d4dd9/html5/thumbnails/36.jpg)
Esempio
36
from-space
to-space
root A
C B
D
forwarding address
pointer
A’ B’ C’ D’
![Page 37: AA 2016-2017 27. Garbage collec - Dipartimento di Informaticapages.di.unipi.it/ferrari/CORSI/PR2/LEZIONI2017/PR2027.pdf · o ogge di dimensioni variabili o ogge con vita non LIFO](https://reader035.vdocuments.pub/reader035/viewer/2022063017/5fd8f52b0b3f9453ba6d4dd9/html5/thumbnails/37.jpg)
Scambiodeiruoli
37
to-space
from-space
forwarding address
pointer
A’ B’ C’ D’ root
![Page 38: AA 2016-2017 27. Garbage collec - Dipartimento di Informaticapages.di.unipi.it/ferrari/CORSI/PR2/LEZIONI2017/PR2027.pdf · o ogge di dimensioni variabili o ogge con vita non LIFO](https://reader035.vdocuments.pub/reader035/viewer/2022063017/5fd8f52b0b3f9453ba6d4dd9/html5/thumbnails/38.jpg)
Copyingcollector:valutazione
Èefficacenellaallocazionediporzionidispaziodidimensionidifferen,eevitaproblemidiframmentazione CaraEeris,canega,va:duplicazionedelloheapo da,sperimentalidiconochefunzionamoltobenesuarchiteEurehardwarea64-bit
38
![Page 39: AA 2016-2017 27. Garbage collec - Dipartimento di Informaticapages.di.unipi.it/ferrari/CORSI/PR2/LEZIONI2017/PR2027.pdf · o ogge di dimensioni variabili o ogge con vita non LIFO](https://reader035.vdocuments.pub/reader035/viewer/2022063017/5fd8f52b0b3f9453ba6d4dd9/html5/thumbnails/39.jpg)
Genera,onalGarbageCollec,on
Osservazionedibaseo “mostcellsthatdie,dieyoung”(adesempioacausadelleregolediscopedeiblocchi)
Sidivideloheapinuninsiemedigenerazioni Ilgarbagecollectoroperasullegenerazionipiùgiovani
39
![Page 40: AA 2016-2017 27. Garbage collec - Dipartimento di Informaticapages.di.unipi.it/ferrari/CORSI/PR2/LEZIONI2017/PR2027.pdf · o ogge di dimensioni variabili o ogge con vita non LIFO](https://reader035.vdocuments.pub/reader035/viewer/2022063017/5fd8f52b0b3f9453ba6d4dd9/html5/thumbnails/40.jpg)
Esempio(1)
40
Young
Old
root set
A
B
C
D
E
F
G
![Page 41: AA 2016-2017 27. Garbage collec - Dipartimento di Informaticapages.di.unipi.it/ferrari/CORSI/PR2/LEZIONI2017/PR2027.pdf · o ogge di dimensioni variabili o ogge con vita non LIFO](https://reader035.vdocuments.pub/reader035/viewer/2022063017/5fd8f52b0b3f9453ba6d4dd9/html5/thumbnails/41.jpg)
Esempio(2)
41
Young
Old
root set
A
B
D
E
F
G
C
![Page 42: AA 2016-2017 27. Garbage collec - Dipartimento di Informaticapages.di.unipi.it/ferrari/CORSI/PR2/LEZIONI2017/PR2027.pdf · o ogge di dimensioni variabili o ogge con vita non LIFO](https://reader035.vdocuments.pub/reader035/viewer/2022063017/5fd8f52b0b3f9453ba6d4dd9/html5/thumbnails/42.jpg)
Copying+generazioni
42
Youngest
Oldest
To-space
From-space
From-space
To-space
root set
.
.
.
Middle generation(s)
![Page 43: AA 2016-2017 27. Garbage collec - Dipartimento di Informaticapages.di.unipi.it/ferrari/CORSI/PR2/LEZIONI2017/PR2027.pdf · o ogge di dimensioni variabili o ogge con vita non LIFO](https://reader035.vdocuments.pub/reader035/viewer/2022063017/5fd8f52b0b3f9453ba6d4dd9/html5/thumbnails/43.jpg)
GCnellapra,ca
Sun/OracleHotspotJVMo GCcontregenerazioni(0,1,2)o Gen.1copycollec,ono Gen.2mark-sweepconmeccanismiperevitarelaframmentazione
Microso�.NET–GCcontregenerazioni(0,1,2)–Gen.2mark-sweep(nonsemprecompaEaiblocchisulloheap)
43