Sobes.tech
Middle

Postoje li linkovi koji prikazuju kako radi sakupljač smeća?

sobes.tech АИ

Одговор од АИ

Da, moguće je napraviti primere koji pokazuju uticaj sakupljača smeća.

// Primer 1: Kreiranje velikog broja objekata

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)); // Kreiranje mnogo objekata
        }
        // U ovom trenutku, sakupljač smeća može biti pozvan da oslobodi memoriju
        // ako objekti u listi nisu više korišćeni drugde.
        // Čak i ako se ne pozove eksplicitno, aktiviraće se po potrebi.

        // Pražnjenje liste može potencijalno osloboditi memoriju
        objects.clear(); 

        System.gc(); // Eksplicitni zahtev za sakupljanje smeća (ne garantuje izvršenje)
    }

    static class DummyObject {
        private int id;

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

        @Override
        protected void finalize() throws Throwable {
            // Metoda finalize se poziva pre sakupljanja smeća (nije garantovano i nije preporučljivo)
            // System.out.println("Objekat sa id: " + id + " se sakuplja.");
        }
    }
}
// Primer 2: Postavljanje referenci na null

public class GarbageCollectionDemo2 {

    public static void main(String[] args) {
        Object obj = new Object(); // Kreiranje objekta
        System.out.println("Objekat kreiran."); 

        obj = null; // Uklanjanje reference na objekat. Sada je podoban za sakupljanje smeća.
        System.out.println("Referenca na objekat postavljena na null.");

        System.gc(); // Eksplicitni zahtev za sakupljanje smeća
    }
}

Ovi primeri pokazuju kako kreiranje velikog broja objekata ili uklanjanje referenci čini objekte podobnim za sakupljanje smeća. Važno je razumeti da eksplicitno pozivanje System.gc() ne garantuje da će sakupljač smeća odmah biti pokrenut; JVM odlučuje kada će ga pokrenuti, na osnovu svojih unutrašnjih algoritama.