Sobes.tech
Middle

Tullantı toplayıcısının necə işlədiyini göstərən bağlantılar var mı?

sobes.tech Süni İntellekt

AI-dan cavab

Bəli, tullantıların toplanması mexanizminin təsirini göstərən nümunələr yaratmaq mümkündür.

// Nümunə 1: Çox sayda obyektin yaradılması

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)); // Çox sayda obyekt yaradılır
        }
        // Bu anda, tullantıların toplanması mexanizmi çağırıla bilər və yaddaş boşaldıla bilər
        // əgər siyahıdakı obyektlər başqa yerdə istifadə olunmursa.
        // Hətta açıq çağırılmasa belə, ehtiyac olduqda işə düşəcək.

        // Siyahını təmizləmək potensial olaraq yaddaşı boşalda bilər
        objects.clear(); 

        System.gc(); // Açıq çağırış ilə tullantıların toplanmasını istəyin (zəmanət verilmir)
    }

    static class DummyObject {
        private int id;

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

        @Override
        protected void finalize() throws Throwable {
            // finalize metodu tullantıların toplanmasından əvvəl çağırılır (zəmanət edilmir və tövsiyə edilmir)
            // System.out.println("Id ilə obyekt toplanır: " + id);
        }
    }
}
// Nümunə 2: Referansların null təyin edilməsi

public class GarbageCollectionDemo2 {

    public static void main(String[] args) {
        Object obj = new Object(); // Obyekt yaradılır
        System.out.println("Obyekt yaradıldı."); 

        obj = null; // Ob'ektə olan referansı silin. İndi o tullantıların toplanmasına uyğun olur.
        System.out.println("Obyektə referans null olaraq təyin edildi.");

        System.gc(); // Açıq çağırış ilə tullantıların toplanmasını istəyin
    }
}

Bu nümunələr çox sayda obyektin yaradılması və ya referansların silinməsi obyektləri tullantıların toplanmasına uyğun edir. Əhəmiyyətlidir ki, System.gc()-nin açıq çağırışı dərhal tullantıların toplanmasını təmin etmir; JVM onun nə zaman işlədiləcəyinə öz daxili algoritmlərinə əsaslanaraq qərar verir.