Sobes.tech
Middle

Ar yra nuorodų, kurios demonstruoja, kaip veikia šiukšlių surinkėjas?

sobes.tech AI

Atsakymas iš AI

Taip, galima sukurti pavyzdžių, kurie parodo šiukšlių surinkėjo poveikį:

// Pavyzdys 1: Daug objektų kūrimas

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)); // Kuriame daug objektų
        }
        // Šiuo metu šiukšlių surinkėjas gali būti iškviestas, kad atlaisvintų atmintį
        // jei sąrašo objektai nėra naudojami kitur:
        // Net jei nėra tiesiogiai iškviečiamas, jis veiks pagal poreikį:

        // Sąrašo išvalymas gali potencialiai atlaisvinti atmintį
        objects.clear(); 

        System.gc(); // Aiškus šiukšlių surinkėjo iškvietimas (ne garantuoja vykdymą)
    }

    static class DummyObject {
        private int id;

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

        @Override
        protected void finalize() throws Throwable {
            // finalize metodas iškviečiamas prieš šiukšlių surinkimą (ne garantuojama ir nerekomenduojama)
            // System.out.println("Objektas surenkamas, id: " + id);
        }
    }
}
// Pavyzdys 2: nuorodų null'inimas

public class GarbageCollectionDemo2 {

    public static void main(String[] args) {
        Object obj = new Object(); // Objektas sukurtas
        System.out.println("Objektas sukurtas."); 

        obj = null; // Nuorodos į objektą ištrynimas. Dabar jis yra prieinamas šiukšlių surinkėjui:
        System.out.println("Nuoroda į objektą nustatyta į null.");

        System.gc(); // Aiškus šiukšlių surinkėjo iškvietimas
    }
}

Šie pavyzdžiai parodo, kaip didelis objektų kūrimas arba nuorodų šalinimas padaro objektus prieinamus šiukšlių surinkėjui. Svarbu suprasti, kad System.gc() iškvietimas nėra garantija, kad šiukšlių surinkėjas bus iškart paleistas; JVM nuspręs, kada jį vykdyti, remdamasis savo vidiniais algoritmais.