Sobes.tech
Middle

Existe-t-il des liens qui montrent le fonctionnement du ramasse-miettes?

sobes.tech IA

Réponse de l'IA

Oui, il est possible de créer des exemples illustrant l'influence du ramasse-miettes.

// Exemple 1 : Création d'un grand nombre d'objets

public class GarbageCollectionDemo1 {

    public static void main(String[] args) {
        List<DummyObject> objects = new ArrayList<>();
        for (int i = 0; i < 1000000; i++) {
            objects.add(new DummyObject(i)); // Création de nombreux objets
        }
        // À ce moment, le ramasse-miettes peut être appelé pour libérer de la mémoire
        // si les objets de la liste ne sont plus utilisés ailleurs.
        // Même si ce n'est pas appelé explicitement, il s'activera si nécessaire.

        // Nettoyer la liste peut potentiellement libérer de la mémoire
        objects.clear(); 

        System.gc(); // Demande explicite de collecte de déchets (ne garantit pas son exécution)
    }

    static class DummyObject {
        private int id;

        public DummyObject(int id) {
            this.id = id;
        }

        @Override
        protected void finalize() throws Throwable {
            // La méthode finalize est appelée avant la collecte de déchets (non garantie et non recommandée)
            // System.out.println("Objet avec id : " + id + " est en cours de collecte.");
        }
    }
}
// Exemple 2 : Mise à null des références

public class GarbageCollectionDemo2 {

    public static void main(String[] args) {
        Object obj = new Object(); // Création d'un objet
        System.out.println("Objet créé."); 

        obj = null; // Suppression de la référence à l'objet. Il devient éligible pour la collecte de déchets.
        System.out.println("Référence à l'objet mise à null.");

        System.gc(); // Demande explicite de collecte de déchets
    }
}

Ces exemples montrent comment la création de nombreux objets ou la suppression de références rend les objets éligibles à la collecte de déchets. Il est important de comprendre que l'appel explicite à System.gc() ne garantit pas que le ramasse-miettes s'exécutera immédiatement ; la JVM décide quand le faire, en fonction de ses algorithmes internes.