Sobes.tech
Middle

Existují odkazy, které ukazují, jak funguje sběrač odpadu?

sobes.tech AI

Odpověď od AI

Ano, je možné vytvořit příklady, které demonstrují vliv sběrače odpadu.

// Příklad 1: Vytvoření velkého množství objektů

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)); // Vytvoření mnoha objektů
        }
        // V tuto chvíli může být volán sběrač odpadu pro uvolnění paměti
        // pokud objekty v seznamu nejsou nikde jinde používány.
        // I když není volán explicitně, aktivuje se podle potřeby.

        // Vyprázdnění seznamu může potenciálně uvolnit paměť
        objects.clear(); 

        System.gc(); // Explicitní žádost o sběr odpadu (nezaručuje provedení)
    }

    static class DummyObject {
        private int id;

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

        @Override
        protected void finalize() throws Throwable {
            // Metoda finalize je volána před sběrem odpadu (není garantováno a nedoporučuje se)
            // System.out.println("Objekt s id: " + id + " je sbírán.");
        }
    }
}
// Příklad 2: Nastavení odkazů na null

public class GarbageCollectionDemo2 {

    public static void main(String[] args) {
        Object obj = new Object(); // Vytvoření objektu
        System.out.println("Objekt vytvořen."); 

        obj = null; // Odstranění odkazu na objekt. Nyní je vhodný pro sběr odpadu.
        System.out.println("Odkaz na objekt nastaven na null.");

        System.gc(); // Explicitní žádost o sběr odpadu
    }
}

Tyto příklady ukazují, jak tvorba velkého množství objektů nebo odstranění odkazů činí objekty vhodnými pro sběr odpadu. Je důležité pochopit, že volání System.gc() nezaručuje okamžité spuštění sběrače odpadu; JVM rozhoduje, kdy ho spustí, na základě svých interních algoritmů.