dimanche 6 décembre 2009

GWT memory management

La gestion de la mémoire dans une application GWT est particulière. Le garbage collector dépend directement du navigateur, c'est pourquoi il y a des différences de consommation mémoire d'un navigateur à un autre. Au delà de ce constat, il y a des pièges a éviter pour que le garbage collector puisse faire correctement son travail.

Tout d'abord, il faut savoir que la méthode "finalize" héritée de la classe Object, n'est pas appelée avant destruction d'un objet.
La seule méthode fiable pour libérer des ressources est la méthode "onDetach", car elle est appelé systématiquement lorsqu'un objet graphique (qui hérite de Widget) est détaché du DOM.

Le modèle évènementiel de GWT peut être une source de non libération de la mémoire si l'on ne s'assure pas que les composants sont désabonnés aux évènements au moment de leur détachement du DOM. Ceci est particulièrement vraiment si vous utilisez un bus d'évènements.
Deux autres sources de fuite mémoire sont l'utilisation de méthodes natives et la manipulation direct du DOM.
Enfin un point particulièrement sensible est l'abonnement aux évènements de type "Window", car les objets abonnés à ce type d'évènement resteront en mémoire tant que la page ne sera pas déchargée.

Voila un petit résumé des points à contrôler dans une application GWT pour éviter d'avoir des fuites mémoire.

Complément :

Une autre source de fuites mémoire et de ralentissements d'une application GWT est le non arrêt des timers. Il faut s'assurer que la méthode cancel de la classe Timer soit bien appelée.

Aucun commentaire:

Enregistrer un commentaire