Accueil
 Sommaire du cours
 1  Introduction à Java
 2  Concepts de bases de Java
 3  Classes et objets en Java
 3.1  Classe
 3.2  Objet
 3.2.1  Constructeurs en Java
 3.2.2  Exemples de constructeurs
 3.2.3  this
 3.2.4  Exemples d'utilisation de this
 3.2.5  Destruction des objets
 3.2.6  Abstraction et encapsulation
 3.2.7  Visibilité des méthodes
 3.3  Attributs et méthodes de classe
 3.4  Association entre classes
 Questions
 4  Généralisation spécialisation en Java
 5  Organisation des sources Java
 6  API Java
 7  Exceptions en Java
 8  Concepts objets avancés en Java
 Bibliographie

 Contacts

W3C validator

Département INF  
 Conception et programmation orientées objet


3.2.5 Destruction des objets
  • Pas de technique particulière pour détruire un objet
  • Objet détruit lorsqu’il n’est plus référencé
  • Utilisation d’un ramasse miettes
  • Le Garbage Collector détruit les objets non référencés
  • La destruction est asynchrone
  • Il n’y a pas de garantie sur la destruction (le programme peut se terminer avant que l’objet ne soit détruit)
  • Si la classe décrit une méthode appelée finalize, cette méthode est appelée avant la libération de la mémoire de l’objet

    précédent     suivant 


Comme nous l’avons dit dans l’introduction, le langage Java a été pensé pour pallier les principales difficultés du langage C++ et en particulier, les erreurs associées à la gestion des références vers les objets. Il est en effet difficile de garantir qu’un objet est désalloué lorsqu’il n’est plus utilisé.

Les langages modernes et Java en particulier prennent à leur charge la gestion des allocations et des libérations de la mémoire en tenant à jour la liste des références vers les blocs alloués. Pour Java, c’est la machine virtuelle Java qui réalise ces opérations et qui met en œuvre un ramasse miettes pour vérifier périodiquement que les objets alloués sont toujours référencés.

Lorsque les objets ne sont plus référencés, le ramasse miettes récupère l’espace mémoire qu’ils occupent. Puis, il met cet espace mémoire à la disposition de la création de nouveaux objets.

Ce ramasse miettes fonctionne de manière périodique et asynchrone à l’intérieur d’un fil d’exécution séparé de la JVM. Il n’y a pas de garantie qu’un objet soit détruit. Il est possible de déclencher le fonctionnement du ramasse miettes par l’appel à la méthode de classeSystem.gc().

Christian Bac, Denis Conan, Télécom SudParis, CSC 4002, Octobre 2015