2. 2 Speaker bio – PiergiorgioNieroTWITTER: @pigiuz Flash Platform developer since Macromedia® Flash 4 Software Engineer at Kaseya Corp( www.kaseya.com ) Co-Manager of The Flash Mind – AUG Milano Italy( www.theflashmind.com ) Casual tech blogger – FlashFuck.it( www.flashfuck.it )
7. Daterminazionedeterministica a una “non deterministic object finalization”Recupera le risorse allocate da questi oggetti Identifica oggetti non più in uso Libera le risorse e le rende disponibili
12. 7 Capireil GC – Determinare la raggiungibilitàdi un oggetto Un oggetto è raggiungibilequando a runtime c’èalmenounavariabileuntatoreche conduce ad esso Esistono due tipi di garbage: SINTATTIC GARBAGE: non esistepiù un puntatorevalidoall’oggetto (risolvibile a compile time) SEMANTIC GARBAGE: ipuntatorivalidi ad un oggettoesistonoall’internodi un bloccodicodice
13. 8 Capireil GC – Reference Count Ognioggetto ha assegnato un contatoredeipuntatori ad esso L’oggettodiventa “garbaggiabile” quandoilsuocontatore è a zero: VANTAGGIO: è quantopiùprossimo ad unagestionedeterministicadellamemoria SVANTAGGIO: se due oggettisonocollegatitralororeciprocamente e non c’ènessunpuntatoreaccessibiledalprogramma per recuperarliilrisultato è un MEMORY LEAK A 1 B 1 LEAK! Singleton A 1
14. 9 Capireil GC – Mark and Sweep Ognioggetto in memoria ha un flag “in use” assegnatodal GC Il GC iteraricorsivamentetuttiglioggetti e partendodainodi root e marca “in use” quelliraggiungibili Vieneeffettuataunasecondaiterazionedituttiglioggetti in memoria e vieneliberata la memoriadeglioggetti non “in use” To be collected! C 2 A 1 A 1 D 1 B 1 ROOT B 1 To be collected! E 0 ROOT
15.
16. 11 Imboccareil GC – IDispose Il GC determinaglioggettidaliberaretramite reference count Creazionedi un destructor custom (rubiamodac++ e daBitmapData.dispose())
17. 12 Alleggerireil GC – Blitting Il GC devepercorrerericorsivamentetuttiglioggettipartendodalle root Lo stage del nostroswf è una root sullaqualepoggia la display list Diminuiamonotevolmenteilnumerodioggettidapercorrere: Riconduciamo la display list in un unico Bitmap ( display list != root ) Raggruppiamoglioggettisorgente ( sprite sheet ) Mario Sprite Sheet Super Mario Bros Level - Blitted
18. 13 Non utilizzareil GC – Memory Pool Il GC arrestailsistemamentrelibera la memoria Il GC determinaglioggettidaliberaretramite reference count Creazioneglioggettitramite un object pool Riduciamo al minimoglioggettidariciclarestabilizzandol’usodellamemoria Pre-allocazionedeglioggetti Riduciamo al minimo la creazionedinuovioggettiriutilizzandosempreglistessi