« Salut, Amigo ! »

« Coucou, Ellie. Tu as quelque chose d'intéressant à me dire ? »

« Aujourd'hui, nous allons parler du temps qu'un objet reste en mémoire ; ce qu'on appelle la durée de vie de l'objet. Une fois qu'un objet est créé, il existe (vit) tant qu'au moins une variable stocke son adresse (c'est-à-dire qu'il y a au moins une référence à cet objet). S'il n'y a plus de références, l'objet meurt. Voici quelques exemples : »

public class MainClass
{
   public static void main (String[] args)
   {
    Tommy
     Cat cat = new Cat("Tommy");
     cat = null;
    
    Sammy
     Cat cat1 = new Cat("Sammy");
    Missy
    Cat cat2 = new Cat("Missy");
    cat2 = cat1;
    
    Ginger
    cat1 = new Cat("Ginger");
    cat2 = null;
    
    
   }
}

« L'objet Tommy n'existe que depuis une petite ligne depuis sa création. La seule variable faisant référence à l'objet est définie sur null la ligne juste après, et l'objet est donc détruit par la machine virtuelle Java (JVM). »

« L'objet Sammy est stocké dans la variable chat1 après sa création. Ou, plus précisément, la variable stocke une référence à cet objet. Quelques lignes plus loin, cette référence est copiée dans chat2. Ensuite, une référence à un autre objet est enregistrée dans chat1. Maintenant, seule la variable chat2 référence Sammy. Enfin, la dernière référence à l'objet est définie sur zéro à la dernière ligne de la méthode main. »

« L'objet Missy n'existe que depuis une petite ligne depuis sa création. À la ligne suivante, la variable chat2 est définie sur une autre valeur, et la référence à Missy est perdue. L'objet n'est plus accessible, il est donc considéré comme inutile (mort) par le système. »

« Une fois créé, l'objet Gingembre existe jusqu'à la fin de la méthode. À la fin de la méthode, la variable chat2 est détruite, et Gingembre est détruit immédiatement après. »

« Je vois. »

« Mais si nous créons un objet Chat au sein d'une méthode et stockons sa référence dans une variable d'instance, l'objet Chat existera aussi longtemps qu'il est référencé par un autre objet encore en vie. »

« En fait, un objet n'est généralement pas détruit immédiatement par le système. La Virtual Machine Java passe le 'ramasse-miettes' (garbage collector) de temps à autre, pour détruire les objets qui ont été marqués pour suppression. Je te reparlerai de ce processus plus tard. »

« Et enfin, si nous ne voulons plus qu'une variable référence un objet, nous pouvons la définir sur null ou lui attribuer une référence à un autre objet. »