Upload
others
View
0
Download
0
Embed Size (px)
Citation preview
Pr�ugikoristus
"Reference-counting" pr�ugikoristus
"Mark-sweep" ja "mark-compact" pr�ugikoristus
"Copying" pr�ugikoristus
P~olvkonniti pr�ugikoristus
Pr�ugikoristus
Pr�ugikoristus (garbage collection) vabastab automaatselt kuh-jaobjektid, mida programm ei saa enam kasutada.
Koosneb kahest osast:
{ elusate objektide ja pr�ugi eristamisest (garbage detec-tion);
{ pr�ugi vabastamisest (garbage reclamation).
Elusus (liveness) on globaalne semantiline omadus, mida
�uldjuhul pole v~oimalik t�apselt kindlaks m�a�arata.
Pr�ugikoristus kasutab ligikaudset kriteeriumit: objekt on elus,kui ta on "juurtest" (root set) l�ahtudes k�attesaadav.
2 / 27
"Reference-counting" pr�ugikoristus
"Reference-Counting"
Iga objektiga seotakse loendur, mis n�aitab antud objektileviitavate viitade arvu.
Loenduri muutmine toimub objektile viitadelisamisel/kustutamisel:
{ uue viida lisandumisel loendurit suurendatakse;{ viida kustutamisel loendurit v�ahendatakse.
Kui loendur on null, siis objekt vabastatakse:
{ vabastatud objekt lisatakse vabade objektide listi;{ k~oik viidad, kuhu see objekt viitas, kustutatakse.
3 / 27
"Reference-counting" pr�ugikoristus
N�aide:
1 2 1
1 1
1
2
1 1
HEAP SPACE
ROOTSET
4 / 27
"Reference-counting" pr�ugikoristus
N�aide:
2 2 1
1 1
1
2
0 1
HEAP SPACE
ROOTSET
4 / 27
"Reference-counting" pr�ugikoristus
N�aide:
2 2 1
1 1
1
2
0
HEAP SPACE
ROOTSET
4 / 27
"Reference-counting" pr�ugikoristus
N�aide:
2 2 1
1 1
1
1
HEAP SPACE
ROOTSET
4 / 27
"Reference-counting" pr�ugikoristus
Eelised
4 on lihtne realiseerida;
4 pr�ugikoristusega seotud toimingud on hajutatud:
{ suhteliselt lihtsalt modi�tseeritav inkrementaalseks;
4 hea viitade lokaalsus:
{ muudetakse ainult l�ahte- ja sihtviitade loendureid;
4 aeg objekti muutumisel pr�ugiks ning tema vabastamisevahel (zombie time) on minimaalne;
4 v~oimaldab lihtsasti realiseerida objektide "�naliseerimist".
5 / 27
"Reference-counting" pr�ugikoristus
Puudused
8 suhteliselt ebaefektiivne:
{ peab haldama loendureid isegi, kui pr�ugi ei koristata;
8 m�alu fragmenteerumine:
{ analoogne teiste vabade objektide listil baseeruvateskeemidega;
8 paljude v�aikeste objektide korral v~oib loendurite pealekuluda suhteliselt palju m�alu;
8 rekursiivne vabastamine on halvimal juhul t~okestatudkuhja suurusega;
8 ei suuda vabastada kogu pr�ugi:
{ ts�uklilised andmestruktuurid.
6 / 27
"Mark-sweep" pr�ugikoristus
"Mark-Sweep"
Toimub kahes faasis:
1 l�ahtudes juurtest, m�argendatakse k~oik k�attesaadavad objek-tid;
2 teostatakse kuhja t�aisl�abivaatus ning m�argendamata objek-tid vabastatakse.
void gc () {foreach x 2 Roots do
mark (x);
end;
collect ();
}
7 / 27
"Mark-sweep" pr�ugikoristus
Protseduur mark()
M�argendab etteantud tipu ning seej�arel rekursiivselt k~oikk�attesaadavad tipud.
Rekursioon l~opeb, kui tipp on juba m�argendatud v~oi kuiantud tipp sisaldab ainult baasv�a�artusi.
void mark (ref x) {if (x!mark == 0) {x!mark = 1;
foreach y 2 sons(x) do
mark (y);
end;
}}
8 / 27
"Mark-sweep" pr�ugikoristus
Protseduur collect()
Vaatab l�abi k~oik kuhjaobjektid ning lisab m�argendamataobjektid vabade objektide listi.
void collect () {freelist = NIL;
foreach x 2 objects() do
if (x!mark == 0) {x!next = freelist;
freelist = x;
}else x!mark = 0;
end;
}
9 / 27
"Mark-sweep" pr�ugikoristus
N�aide:
1 Rekursiivne m�arkimine:
2 Objektide vabastamine:
0 0 0 0 0
10 / 27
"Mark-sweep" pr�ugikoristus
N�aide:
1 Rekursiivne m�arkimine:
2 Objektide vabastamine:
1 0 0 0 0
10 / 27
"Mark-sweep" pr�ugikoristus
N�aide:
1 Rekursiivne m�arkimine:
2 Objektide vabastamine:
1 0 1 0 0
10 / 27
"Mark-sweep" pr�ugikoristus
N�aide:
1 Rekursiivne m�arkimine:
2 Objektide vabastamine:
1 0 1 0 1
10 / 27
"Mark-sweep" pr�ugikoristus
N�aide:
1 Rekursiivne m�arkimine:
2 Objektide vabastamine:
1 0 1 0 1
10 / 27
"Mark-sweep" pr�ugikoristus
N�aide:
1 Rekursiivne m�arkimine:
2 Objektide vabastamine:
1 0 1 0 1
10 / 27
"Mark-sweep" pr�ugikoristus
N�aide:
1 Rekursiivne m�arkimine:
2 Objektide vabastamine:
1 0 1 0 1
FL
10 / 27
"Mark-sweep" pr�ugikoristus
N�aide:
1 Rekursiivne m�arkimine:
2 Objektide vabastamine:
0 0 1 0 1
FL
10 / 27
"Mark-sweep" pr�ugikoristus
N�aide:
1 Rekursiivne m�arkimine:
2 Objektide vabastamine:
0 0 1 0 1
FL
10 / 27
"Mark-sweep" pr�ugikoristus
N�aide:
1 Rekursiivne m�arkimine:
2 Objektide vabastamine:
0 0 0 0 1
FL
10 / 27
"Mark-sweep" pr�ugikoristus
N�aide:
1 Rekursiivne m�arkimine:
2 Objektide vabastamine:
0 0 0 0 1
FL
10 / 27
"Mark-sweep" pr�ugikoristus
N�aide:
1 Rekursiivne m�arkimine:
2 Objektide vabastamine:
0 0 0 0 0
FL
10 / 27
"Mark-sweep" pr�ugikoristus
Puudused
8 Objektide m�arkimine toimub rekursiivselt.
{ Rekursioonimagasin kasvab halvimal juhul linearseltkuhja suurusega!!
{ V~oimalik lahendus: Deutsch-Schorr-Waite'i "viitadep�o�oramise" (pointer reversal) algoritm.
8 Elusad objektid on kuhjas vabade m�alupiirkondadegasegamini.
{ M�alu fragmenteerumine.{ V~oimalik lahendus: "mark-compact" pr�ugikoristus.
11 / 27
"Mark-compact" pr�ugikoristus
"Mark-Compact"
Toimub kolmes faasis:
1 l�ahtudes juurtest, m�argendatakse k~oik k�attesaadavadobjektid (analoogselt "mark-sweep" pr�ugikoristusega);
2 teostatakse kuhja t�aisl�abivaatus ning arvutataksem�argendatud objektide uued aadressid;
3 nihutatakse m�argendatud objektide uude asukohta ningviitadele antakse uued v�a�artused.
4 Pr�ugikoristuse tulemusena paikneb kogu vaba m�alukompaktselt kuhja l~opus.
8 On suhteliselt aeglane, kuna kuhjaobjekte tuleb l�abidapalju kordi.
12 / 27
"Copying" pr�ugikoristus
"Copying"
Kuhi jagatud kaheks v~ordseks alampiirkonnaks: FromSpaceja ToSpace.
FromSpace on aktiivselt kasutatav m�alupiirkond, kuhusalvestatakse uued objektid.
Kui FromSpace saab t�ais, siis teostatakse pr�ugikoristus:
{ elusad objektid kopeeritakse FromSpace'ist ToSpace'i;{ FromSpace ja ToSpace vahetavad rollid (so. endineToSpace muutub FromSpace'iks ja vastupidi).
13 / 27
"Copying" pr�ugikoristus
FROMSPACE TOSPACEROOTSET
14 / 27
"Copying" pr�ugikoristus
FROMSPACE TOSPACEROOTSET
14 / 27
"Copying" pr�ugikoristus
TOSPACE FROMSPACEROOTSET
14 / 27
"Copying" pr�ugikoristus
Cheney algoritm
Toimub kahes (�uksteisega vahelduvas) faasis:
esimese faasis (evacuate) kopeeritakse vahetultk�attesaadavad objektid FromSpace'ist ToSpace'i, kasutatudviidad asendatakse viitadega vastavatele uutele objektide-le ning vanade objektide asemele installeeritakse "edasi
toimetamise" viidad (forwarding pointers);
teises faasis (scavenge) skaneeritakse ToSpace'i kopeeritudobjektid lineaarselt l�abi ning k~oik FromSpace'ist vahetultk�attesaadavad objektid evakueeritakse ToSpace'i; kui eva-kueeritav objekt on juba varem kopeeritud, siis objektiuuesti ei kopeerita, vaid asendatatakse j�argitav viit selle"edasi toimetamise" viidaga;
protsess l~opeb, kui skaneerimisviit j~ouab j�arele kuhjat�aitumisviidale.
15 / 27
"Copying" pr�ugikoristus
FROMSPACE
TOSPACE
ROOT SET
A B
C
D E
F
G
FreeScan
16 / 27
"Copying" pr�ugikoristus
FROMSPACE
TOSPACE
ROOT SET
A B
C
D E
F
G
A B
FreeScan
16 / 27
"Copying" pr�ugikoristus
FROMSPACE
TOSPACE
ROOT SET
A B
C
D E
F
G
A B C
FreeScan
16 / 27
"Copying" pr�ugikoristus
FROMSPACE
TOSPACE
ROOT SET
A B
C
D E
F
G
A B C D
FreeScan
16 / 27
"Copying" pr�ugikoristus
FROMSPACE
TOSPACE
ROOT SET
A B
C
D E
F
G
A B C D E
FreeScan
16 / 27
"Copying" pr�ugikoristus
FROMSPACE
TOSPACE
ROOT SET
A B
C
D E
F
G
A B C D E F
FreeScan
16 / 27
"Copying" pr�ugikoristus
FROMSPACE
TOSPACE
ROOT SET
A B
C
D E
F
G
A B C D E F G
FreeScan
16 / 27
"Copying" pr�ugikoristus
FROMSPACE
TOSPACE
ROOT SET
A B
C
D E
F
G
A B C D E F G
FreeScan
16 / 27
"Copying" pr�ugikoristus
FROMSPACE
TOSPACE
ROOT SET
A B
C
D E
F
G
A B C D E F G
FreeScan
16 / 27
"Copying" pr�ugikoristus
Eelised
4 kogu vaba m�alu on kompaktselt koos;
4 suvalise suurusega uute objektide loomine on v�aga odav:
{ m�alu reserveerimine on kuhja t�aitumisviidasuurendamine;
{ kuhja t�aitumise kontroll on kahe viida v~ordlemine;
4 inspekteeritakse ainult elusaid objekte:
{ enamus objekte on reeglina suhteliselt l�uhikese elueaga;{ elusaid objekte on seet~ottu tavaliselt tunduvalt v�ahemkui pr�ugi;
4 teoreetiline amortiseeritud efektiivsus v�aga hea:
{ kuhja suuruse kasvades l�ahenevad kopeerimiskuludnullile!
17 / 27
"Copying" pr�ugikoristus
Puudused
8 pool m�alust on "kasutu";
8 kogu t�o�o on kontsentreeritud pr�ugikoristuse ajale:
{ v~oib tekitada h�airivaid pause;
8 laiuti l�abivaatus v~oib segamini l�u�ua lokaalsusmustrid;
8 k~oik viidad t~ostetakse ringi:
{ v~oib rikkuda m~ond invarianti, mida programm eeldab;
8 pika elueaga objekte kopeeritakse igal pr�ugikorstusel �uhauuesti:
{ v~oib suurte "veteranobjektide" korral osutuda k�ullaltkikulukaks.
18 / 27
P~olvkonniti pr�ugikoristus
Empiirilisi t�ahelepanekuid
Vasts�undinute suremus (infant mortality) { enamik objektesureb v�aga noorelt.Reeglina 80-90% objekte sureb enne j�argmise megabaidikasutamist:
{ 60-90% CL ja 75-95% Haskelli objektidest surevad ennesaamist 10 kb vanaks.
{ SML/NJ vabastab 98% objektidest iga pr�ugikoristusej�arel.
{ 95% Java objektidest on "l�uhiealised".
Mida vanem on objekt, seda t~oen�aolisemalt elab ta �ulej�argmise pr�ugikoristuse.
Viitade suunatus (directionality of reference) { nooremadobjektid reeglina viitavad vanematele.
19 / 27
P~olvkonniti pr�ugikoristus
P~olvkonniti pr�ugikoristus
M�alu on seal paiknevate objektid vanuse j�argi jaotatudp~olvkondadeks (generations).
P~olvkondade koguarv ja suurus on reeglina eelnevalt�kseeritud.
Uued objektid (infants) lisatakse noorimasse,"vasts�undinute" (nursery), p~olvkonda.
Objekti vananedes (tenure) edutatakse ta j�argmissep~olvkonda.
Erinevates p~olvkondades toimub pr�ugikoristus erinevasagedusega
{ p~ohit�ahelepanu p�o�oratakse noorimale p~olvkonnale.
20 / 27
P~olvkonniti pr�ugikoristus
M�alu jaotus p~olvkondadeks
Generation 1 (youngest)
Generation 2
Generation n (oldest)
...
Live object
Dead object
21 / 27
P~olvkonniti pr�ugikoristus
Meelespead
Lisaks "tavalistele" juurtele, on antud p~olvkonna juurtekska viidad teistest p~olvkondadest temasse.
Nende juurte asukoht pole staatiliselt kindlaksm�a�aratav.
Pr�ugikoristuse aegne juurte otsimine teistest p~olvkondadeston v�aga kulukas.
Seet~ottu seotakse iga p~olvkonnaga meelespea (rememberedset), mis sisaldab teistest p~olvkondadest tulenevaid viitu
{ kui mingi viit on �uhest p~olvkonnast teise, siis lisatakse tavastava sihtp~olvkonna meelespeasse.
22 / 27
P~olvkonniti pr�ugikoristus
Meelespead
Viidad vanemast p~olvkonnast nooremasse on nooremap~olvkonna juurteks:
{ selliseid viitasid esineb suhteliselt harva;{ nad tekivad vanas objektis viida destruktiivselmuutmisel;
{ selliseid omistamisi saab kindlaks teha kasutadeskirjutust~okkeid (write barrier).
Viidad nooremast p~olvkonnast vanemasse on sagedased:
{ pole probleemiks, kui vanema p~olvkonna pr�ugikoristuselalati koristatakse ka noorem p~olvkond.
23 / 27
P~olvkonniti pr�ugikoristus
�Uhesuunalised meelespead
Root set
Younggeneration
Rememberedset
Oldgeneration
24 / 27
P~olvkonniti pr�ugikoristus
P~olvkonniti pr�ugikoristus
Tihti kasutatakse ainult kahte p~olvkonda, kus nooremp~olvkond on vanemast p~olvkonnast v�aiksema suurusega.
Reeglina toimub ainult pisikoristus (minor collection), kus:
{ eemaldatakse pr�ugi ainult nooremast p~olvkonnast;{ piisavalt vanad objektid edutatakse vanemassep~olvkonda.
Vanema p~olvkonna t�aitumisel teostatakse suurpuhastus(major collection); so. eemaldatakse pr�ugi m~olemastp~olvkonnast.
Pisikoristus ja suurpuhastus v~oivad kasutada erinevaidpr�ugikoristuse skeeme (n�ait. pisikoristuse korral "copying"ning suurpuhastuse korral "mark-compact").
25 / 27
P~olvkonniti pr�ugikoristus
Probleemid
Pisikoristused ei eemalda vana p~olvkonna pr�ugi:
{ eakas pr�ugi (tenured garbage) p~ohjustab ka nende noorteobjektide s�ailimise, millele ta viitab (nepotism).
Kui vana peab objekt olema enne j�argmisse p~olvkondaedutamist?
{ �Uks pisikoristus pole piisav, kuna vahetult eelnevaltloodud objektidel pole olnud aega suremiseks.
{ Tavaliselt loetakse piisavaks kaks pisikoristust.
Kui suur peab olema noorim p~olvkond?
{ Peab �ara mahtuma p~ohim�allu.{ Liiga suur teeb pisikoristuse pausid liiga pikaks.{ Liiga v�aike ei anna noortele objektidele aega suremiseks.
26 / 27
P~olvkonniti pr�ugikoristus
P~olvkonniti pr�ugikoristuse eelised
4 V�aga edukas paljude rakenduste korral.
4 L�uhendab pr�ugikoristuse pause interaktiivseteksrakendusteks talutavale tasemele.
4 Heade lokaalsusomadustega.
4 Reeglina v�ahendab pr�ugikoristusele kuluvat koguaega.
P~olvkonniti pr�ugikoristuse puudused
8 Halvimal juhul on lihtsatest meetodidest kulukam.
8 Objektid ei tarvitse surra piisavalt kiiresti.
8 Rakendused v~oivad "takistuda"kirjutust~oketesse.
8 Liiga paljude viitade korral vanadest objektidest noortessev~oi v�aga s�ugava magasini korral v~oib pauside kestuspikeneda.
27 / 27