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
Stabilità4Mr 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 finalization”Recupera 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è quanta\qualememorialibererà
Frammentazionedellamemoria e conseguentecalodi performances
“Embarassing pause”Piùdifficilecadere in erroridigestionedellamemoriaquali:DANGLING POINTERSDOUBLE FREEMEMORY LEAKS
7Capireil GC – Determinare la raggiungibilitàdi un oggettoUn oggetto è raggiungibilequando a runtime c’èalmenounavariabile\puntatoreche conduce ad essoEsistono due tipi di garbage:SINTATTIC GARBAGE: non esistepiù un puntatorevalidoall’oggetto (risolvibile a compile time)SEMANTIC GARBAGE: ipuntatorivalidi ad un oggettoesistonoall’internodi un bloccodicodice
8Capireil GC – Reference CountOgnioggetto ha assegnato un contatoredeipuntatori ad essoL’oggettodiventa “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 use”To 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 1“ciao”“ciao”B 0B 111C 0C 1spritespriteD 0D 1arrayarray
11Imboccareil GC – IDisposeIl GC determinaglioggettidaliberaretramite reference countCreazionedi un destructor custom (rubiamodac++ e daBitmapData.dispose())

Flashcamp Milan 2011 - Garbage Collector in the Flash Platform

  • 1.
  • 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.
    Stabilità4Mr Garbage Collector– John McCartyProfessoreEmeritoalla Stanford UniversityInventore del termine “IntelligenzaArtificiale” (1955)Inventore del linguaggio Lisp (1959)…e del suosistemadi Garbage Collection
  • 5.
    5Cos’è e cosafailGC?Sostituisce lo sviluppatorenelle operazionidigestionedellamemoria
  • 6.
    Determina un cambiamentonettonellostile diprogrammazione:
  • 7.
    Daterminazionedeterministica a una“non deterministic object finalization”Recupera le risorse allocate da questi oggettiIdentifica oggetti non più in usoLibera le risorse e le rende disponibili
  • 8.
    6GC – Prosand ConsConsumodirisorsecomputazionaliminimocostante per deciderequando far partireilprocessodi collection
  • 9.
    Impossibiledeterminarequandoil GC libereràla memorianè quanta\qualememorialibererà
  • 10.
  • 11.
    “Embarassing pause”Piùdifficilecadere inerroridigestionedellamemoriaquali:DANGLING POINTERSDOUBLE FREEMEMORY LEAKS
  • 12.
    7Capireil GC –Determinare la raggiungibilitàdi un oggettoUn oggetto è raggiungibilequando a runtime c’èalmenounavariabile\puntatoreche conduce ad essoEsistono 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.
    8Capireil GC –Reference CountOgnioggetto ha assegnato un contatoredeipuntatori ad essoL’oggettodiventa “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 use”To 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 1“ciao”“ciao”B 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 minimoglioggettidariciclarestabilizzandol’usodellamemoriaPre-allocazionedeglioggettiRiduciamo al minimo la creazionedinuovioggettiriutilizzandosempreglistessi
  • 19.