Middle
Există linkuri care demonstrează modul în care funcționează colectorul de gunoi?
sobes.tech AI
Răspuns de la AI
Da, este posibil să creați exemple care să demonstreze influența colectorului de gunoi.
// Exemplul 1: Crearea unui număr mare de obiecte
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)); // Crearea multor obiecte
}
// În acest moment, colectorul de gunoi poate fi apelat pentru a elibera memorie
// dacă obiectele din listă nu mai sunt utilizate în altă parte.
// Chiar dacă nu este apelat explicit, se va activa după nevoie.
// Golirea listei poate elibera potențial memorie
objects.clear();
System.gc(); // Solicitare explicită pentru colectarea gunoiului (nu garantează execuția)
}
static class DummyObject {
private int id;
public DummyObject(int id) {
this.id = id;
}
@Override
protected void finalize() throws Throwable {
// Metoda finalize este apelată înainte de colectarea gunoiului (negarantată și nerecomandată)
// System.out.println("Obiect cu id: " + id + " este colectat.");
}
}
}
// Exemplul 2: Atribuirea null a referințelor
public class GarbageCollectionDemo2 {
public static void main(String[] args) {
Object obj = new Object(); // Crearea unui obiect
System.out.println("Obiect creat.");
obj = null; // Eliminarea referinței la obiect. Acum este eligibil pentru colectarea gunoiului.
System.out.println("Referință la obiect setată pe null.");
System.gc(); // Solicitare explicită pentru colectarea gunoiului
}
}
Aceste exemple arată cum crearea unui număr mare de obiecte sau eliminarea referințelor face ca obiectele să fie eligibile pentru colectarea gunoiului. Este important să înțelegeți că apelul explicit la System.gc() nu garantează că colectorul de gunoi va fi executat imediat; JVM-ul decide când să îl execute, pe baza algoritmilor săi interni.