Flashcamp Milan 2011 - Garbage Collector in the Flash Platform
-
Upload
piergiorgio-niero -
Category
Technology
-
view
5.299 -
download
1
description
Transcript of Flashcamp Milan 2011 - Garbage Collector in the Flash Platform
© 2011 Adobe Systems Incorporated. All Rights Reserved.
Piergiorgio NieroMy App is a Flash!
© 2011 Adobe Systems Incorporated. All Rights Reserved. 2
Speaker bio – Piergiorgio Niero TWITTER: @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 )
© 2011 Adobe Systems Incorporated. All Rights Reserved.
Session Topic - Garbage Collector
Performance Stabilità
© 2011 Adobe Systems Incorporated. All Rights Reserved. 4
Mr Garbage Collector – John McCarty
Professore Emerito alla Stanford University Inventore del termine “Intelligenza Artificiale” (1955) Inventore del linguaggio Lisp (1959) …e del suo sistema di Garbage Collection
© 2011 Adobe Systems Incorporated. All Rights Reserved. 5
Cos’è e cosa fa il GC?
Identifica oggetti non più in uso
Recupera le risorse allocate
da questi oggetti
Libera le risorse e le rende
disponibili
Sostituisce lo sviluppatore nelle operazioni di gestione della memoria
Determina un cambiamento netto nello stile di programmazione:
Da terminazione deterministica a una “non deterministic object finalization”
© 2011 Adobe Systems Incorporated. All Rights Reserved. 6
GC – Pros and Cons
Più difficile cadere in errori di gestione della memoria quali: DANGLING POINTERS DOUBLE FREE MEMORY LEAKS
Consumo di risorse computazionali minimo costante per decidere quando far partire il processo di collection
Impossibile determinare quando il GC libererà la memoria nè quanta\quale memoria libererà
Frammentazione della memoria e conseguente calo di performances
“Embarassing pause”
© 2011 Adobe Systems Incorporated. All Rights Reserved. 7
Capire il GC – Determinare la raggiungibilità di un oggetto
Un oggetto è raggiungibile quando a runtime c’è almeno una variabile\puntatore che conduce ad esso Esistono due tipi di garbage:
SINTATTIC GARBAGE: non esiste più un puntatore valido all’oggetto (risolvibile a compile time) SEMANTIC GARBAGE: i puntatori validi ad un oggetto esistono all’interno di un blocco di codice
© 2011 Adobe Systems Incorporated. All Rights Reserved. 8
Capire il GC – Reference Count
Ogni oggetto ha assegnato un contatore dei puntatori ad esso L’oggetto diventa “garbaggiabile” quando il suo contatore è a zero:
VANTAGGIO: è quanto più prossimo ad una gestione deterministica della memoria SVANTAGGIO: se due oggetti sono collegati tra loro reciprocamente e non c’è nessun puntatore accessibile dal
programma per recuperarli il risultato è un MEMORY LEAK
A 1 B 1 LEAK!
A 1 Singleton
© 2011 Adobe Systems Incorporated. All Rights Reserved. 9
Capire il GC – Mark and Sweep
Ogni oggetto in memoria ha un flag “in use” assegnato dal GC Il GC itera ricorsivamente tutti gli oggetti e partendo dai nodi root e marca “in use” quelli raggiungibili Viene effettuata una seconda iterazione di tutti gli oggetti in memoria e viene liberata la memoria degli
oggetti non “in use”
A 1 B 1
ROOT
A 1
E 0
D 1
C 2
B 1To be collected!
ROOT
To be collected!
© 2011 Adobe Systems Incorporated. All Rights Reserved. 10
Capire il GC – Weak References
Weak Dictionary
A 0
B 0
C 0
D 0
keys“ciao
”1
sprite
array
values
Normal Dictionary
A 1
B 1
C 1
D 1
keys“ciao
”1
sprite
array
values
Weak reference: riferimenti “speciali” che permettono di raggiungere un oggetto senza incrementare il suo reference count
© 2011 Adobe Systems Incorporated. All Rights Reserved. 11
Imboccare il GC – IDispose
Il GC determina gli oggetti da liberare tramite reference count Creazione di un destructor custom (rubiamo da c++ e da BitmapData.dispose())
© 2011 Adobe Systems Incorporated. All Rights Reserved. 12
Alleggerire il GC – Blitting
Il GC deve percorrere ricorsivamente tutti gli oggetti partendo dalle root Lo stage del nostro swf è una root sulla quale poggia la display list
Diminuiamo notevolmente il numero di oggetti da percorrere: Riconduciamo la display list in un unico Bitmap ( display list != root ) Raggruppiamo gli oggetti sorgente ( sprite sheet )
Mario Sprite Sheet
Super Mario Bros Level - Blitted
© 2011 Adobe Systems Incorporated. All Rights Reserved. 13
Non utilizzare il GC – Memory Pool
Il GC arresta il sistema mentre libera la memoria Il GC determina gli oggetti da liberare tramite reference count
Creazione gli oggetti tramite un object pool Riduciamo al minimo gli oggetti da riciclare stabilizzando l’uso della memoria
Pre-allocazione degli oggetti Riduciamo al minimo la creazione di nuovi oggetti riutilizzando sempre gli stessi
© 2011 Adobe Systems Incorporated. All Rights Reserved.
Thank you
© 2011 Adobe Systems Incorporated. All Rights Reserved.
© 2011 Adobe Systems Incorporated. All Rights Reserved.