Finaliseur

Définition, exemples et bonnes pratiques

À retenir

  • C'est une procédure de nettoyage automatique avant la suppression d'un objet.
  • Il est déclenché par le ramasse-miettes (Garbage Collector), pas par le programmeur directement.
  • Son exécution est souvent lente et imprévisible, ce qui en fait une solution de dernier recours.

Un finaliseur est un bloc de code spécial attaché à un objet informatique, qui s'exécute automatiquement juste avant que cet objet ne soit définitivement supprimé de la mémoire par le système. Imaginez-le comme une « dernière volonté » de l'objet : avant de disparaître, il effectue une ultime corvée de nettoyage, comme fermer un fichier resté ouvert ou couper une connexion réseau.

Étymologie

Vient du verbe « finaliser », issu de l'anglais finalizer. En informatique, il désigne l'étape ultime du cycle de vie d'un objet (création, utilisation, puis finalisation avant destruction).

Exemples d'usage

  • La méthode finalize() utilisée historiquement en langage Java.
  • Les destructeurs en C# (syntaxe ~NomDeLaClasse) qui agissent comme des finaliseurs gérés par le ramasse-miettes.
  • Un script qui libère une poignée de mémoire système spécifique avant de rendre la main.

Cas d'usage

On utilise le finaliseur principalement pour libérer des ressources externes que le ramasse-miettes (Garbage Collector) ne sait pas gérer tout seul, comme des accès à des fichiers, des sockets réseau ou des connexions à des bases de données.

Bonnes pratiques

Il est fortement recommandé d'éviter l'usage des finaliseurs si possible. Ils sont imprévisibles car on ne sait jamais exactement quand ils seront exécutés par le système. Préférez des méthodes de fermeture explicites (comme les blocs try-with-resources en Java ou using en C#) qui garantissent un nettoyage immédiat.

Synonymes

méthode de finalisation destructeur (par extension)

Antonymes

constructeur initialiseur

Conseil

Si vous apprenez la programmation moderne, considérez le finaliseur comme un concept historique. La plupart des langages actuels privilégient aujourd'hui des interfaces comme AutoCloseable ou IDisposable pour gérer les ressources proprement sans attendre le passage du ramasse-miettes.

Questions fréquentes

Quelle est la différence avec un destructeur ?

Un destructeur (en C++) s'exécute immédiatement quand on le demande, alors qu'un finaliseur attend que le ramasse-miettes décide de faire le ménage.

Est-ce que le finaliseur est toujours appelé ?

Non, dans certains cas de fermeture brutale du programme, le système n'a pas toujours le temps d'exécuter les finaliseurs.