Flashcamp Milan 2011 - Garbage Collector in the Flash Platform

Post on 13-Dec-2014

5.300 views 1 download

Tags:

description

Garbage Collector in the Flash Platform.Examples and details at www.flashfuck.it

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.