際際滷

際際滷Share a Scribd company logo
PiergiorgioNieroMy App is a Flash!
2Speaker bio  PiergiorgioNieroTWITTER: @pigiuzFlash Platform developer since Macromedia速 Flash 4Software 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 )
Session Topic - Garbage CollectorPerformance
Stabilit4Mr Garbage Collector  John McCartyProfessoreEmeritoalla Stanford UniversityInventore del termine IntelligenzaArtificiale (1955)Inventore del linguaggio Lisp (1959)e del suosistemadi Garbage Collection
5Cos竪 e cosafail GC?Sostituisce lo sviluppatorenelle operazionidigestionedellamemoria
Determina un cambiamentonettonello stile diprogrammazione:
Daterminazionedeterministica a una non deterministic object finalizationRecupera le risorse allocate da questi oggettiIdentifica oggetti non pi湛 in usoLibera le risorse e le rende disponibili
6GC  Pros and ConsConsumodirisorsecomputazionaliminimocostante per deciderequando far partireilprocessodi collection
Impossibiledeterminarequandoil GC liberer la memorian竪 quantaualememorialiberer
Frammentazionedellamemoria e conseguentecalodi performances
Embarassing pausePi湛difficilecadere in erroridigestionedellamemoriaquali:DANGLING POINTERSDOUBLE FREEMEMORY LEAKS
7Capireil GC  Determinare la raggiungibilitdi un oggettoUn oggetto 竪 raggiungibilequando a runtime c竪almenounavariabileuntatoreche conduce ad essoEsistono due tipi di garbage:SINTATTIC GARBAGE: non esistepi湛 un puntatorevalidoalloggetto (risolvibile a compile time)SEMANTIC GARBAGE: ipuntatorivalidi ad un oggettoesistonoallinternodi un bloccodicodice
8Capireil GC  Reference CountOgnioggetto ha assegnato un contatoredeipuntatori ad essoLoggettodiventa garbaggiabile quandoilsuocontatore 竪 a zero:VANTAGGIO: 竪 quantopi湛prossimo ad unagestionedeterministicadellamemoriaSVANTAGGIO: se due oggettisonocollegatitralororeciprocamente e non c竪nessunpuntatoreaccessibiledalprogramma per recuperarliilrisultato 竪 un MEMORY LEAKA 1B 1LEAK!SingletonA 1
9Capireil GC  Mark and SweepOgnioggetto in memoria ha un flag in use assegnatodal GCIl GC iteraricorsivamentetuttiglioggetti e partendodainodi root e marca in use quelliraggiungibiliVieneeffettuataunasecondaiterazionedituttiglioggetti in memoria e vieneliberata la memoriadeglioggetti non in useTo be collected!C 2A 1A 1D 1B 1ROOTB 1To be collected!E 0ROOT
10Capireil GC  Weak ReferencesWeak reference: riferimenti speciali chepermettonodiraggiungere un oggettosenzaincrementareilsuo reference countWeak DictionaryNormal DictionarykeyskeysvaluesvaluesA 0A 1ciaociaoB 0B 111C 0C 1spritespriteD 0D 1arrayarray
11Imboccareil GC  IDisposeIl GC determinaglioggettidaliberaretramite reference countCreazionedi un destructor custom (rubiamodac++ e daBitmapData.dispose())

More Related Content

Flashcamp Milan 2011 - Garbage Collector in the Flash Platform

  • 2. 2Speaker bio PiergiorgioNieroTWITTER: @pigiuzFlash Platform developer since Macromedia速 Flash 4Software 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 )
  • 3. Session Topic - Garbage CollectorPerformance
  • 4. Stabilit4Mr Garbage Collector John McCartyProfessoreEmeritoalla Stanford UniversityInventore del termine IntelligenzaArtificiale (1955)Inventore del linguaggio Lisp (1959)e del suosistemadi Garbage Collection
  • 5. 5Cos竪 e cosafail GC?Sostituisce lo sviluppatorenelle operazionidigestionedellamemoria
  • 6. Determina un cambiamentonettonello stile diprogrammazione:
  • 7. Daterminazionedeterministica a una non deterministic object finalizationRecupera le risorse allocate da questi oggettiIdentifica oggetti non pi湛 in usoLibera le risorse e le rende disponibili
  • 8. 6GC Pros and ConsConsumodirisorsecomputazionaliminimocostante per deciderequando far partireilprocessodi collection
  • 9. Impossibiledeterminarequandoil GC liberer la memorian竪 quantaualememorialiberer
  • 11. Embarassing pausePi湛difficilecadere in erroridigestionedellamemoriaquali:DANGLING POINTERSDOUBLE FREEMEMORY LEAKS
  • 12. 7Capireil GC Determinare la raggiungibilitdi un oggettoUn oggetto 竪 raggiungibilequando a runtime c竪almenounavariabileuntatoreche conduce ad essoEsistono due tipi di garbage:SINTATTIC GARBAGE: non esistepi湛 un puntatorevalidoalloggetto (risolvibile a compile time)SEMANTIC GARBAGE: ipuntatorivalidi ad un oggettoesistonoallinternodi un bloccodicodice
  • 13. 8Capireil GC Reference CountOgnioggetto ha assegnato un contatoredeipuntatori ad essoLoggettodiventa garbaggiabile quandoilsuocontatore 竪 a zero:VANTAGGIO: 竪 quantopi湛prossimo ad unagestionedeterministicadellamemoriaSVANTAGGIO: se due oggettisonocollegatitralororeciprocamente e non c竪nessunpuntatoreaccessibiledalprogramma per recuperarliilrisultato 竪 un MEMORY LEAKA 1B 1LEAK!SingletonA 1
  • 14. 9Capireil GC Mark and SweepOgnioggetto in memoria ha un flag in use assegnatodal GCIl GC iteraricorsivamentetuttiglioggetti e partendodainodi root e marca in use quelliraggiungibiliVieneeffettuataunasecondaiterazionedituttiglioggetti in memoria e vieneliberata la memoriadeglioggetti non in useTo be collected!C 2A 1A 1D 1B 1ROOTB 1To be collected!E 0ROOT
  • 15. 10Capireil GC Weak ReferencesWeak reference: riferimenti speciali chepermettonodiraggiungere un oggettosenzaincrementareilsuo reference countWeak DictionaryNormal DictionarykeyskeysvaluesvaluesA 0A 1ciaociaoB 0B 111C 0C 1spritespriteD 0D 1arrayarray
  • 16. 11Imboccareil GC IDisposeIl GC determinaglioggettidaliberaretramite reference countCreazionedi un destructor custom (rubiamodac++ e daBitmapData.dispose())
  • 17. 12Alleggerireil GC BlittingIl GC devepercorrerericorsivamentetuttiglioggettipartendodalle rootLo stage del nostroswf 竪 una root sullaqualepoggia la display listDiminuiamonotevolmenteilnumerodioggettidapercorrere:Riconduciamo la display list in un unico Bitmap ( display list != root )Raggruppiamoglioggettisorgente ( sprite sheet )Mario Sprite SheetSuper Mario Bros Level - Blitted
  • 18. 13Non utilizzareil GC Memory PoolIl GC arrestailsistemamentrelibera la memoriaIl GC determinaglioggettidaliberaretramite reference countCreazioneglioggettitramite un object poolRiduciamo al minimoglioggettidariciclarestabilizzandolusodellamemoriaPre-allocazionedeglioggettiRiduciamo al minimo la creazionedinuovioggettiriutilizzandosempreglistessi