Middle
Existujú odkazy, ktoré ukazujú, ako funguje zberač odpadu?
sobes.tech AI
Odpoveď od AI
Áno, je možné vytvoriť príklady, ktoré demonštrujú vplyv zbera odpadu.
// Príklad 1: Vytvorenie veľkého množstva objektov
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)); // Vytvorenie veľkého množstva objektov
}
// V tomto momente môže byť volaný zberač odpadu na uvoľnenie pamäte
// ak objekty v zozname nie sú používané nikde inde.
// Aj keď nie je explicitne volaný, aktivuje sa podľa potreby.
// Vyprázdnenie zoznamu môže potenciálne uvoľniť pamäť
objects.clear();
System.gc(); // Priamy požiadavok na zber odpadu (nezaručuje vykonanie)
}
static class DummyObject {
private int id;
public DummyObject(int id) {
this.id = id;
}
@Override
protected void finalize() throws Throwable {
// Metóda finalize sa volá pred zberom odpadu (nie je garantovaná a neodporúča sa)
// System.out.println("Objekt s id: " + id + " sa zbiera.");
}
}
}
// Príklad 2: Nastavenie odkazov na null
public class GarbageCollectionDemo2 {
public static void main(String[] args) {
Object obj = new Object(); // Vytvorenie objektu
System.out.println("Objekt vytvorený.");
obj = null; // Odstránenie odkazu na objekt. Teraz je vhodný na zber odpadu.
System.out.println("Odkaz na objekt nastavený na null.");
System.gc(); // Priamy požiadavok na zber odpadu
}
}
Tieto príklady ukazujú, ako vytvorenie veľkého množstva objektov alebo odstránenie odkazov robí objekty vhodnými na zber odpadu. Je dôležité pochopiť, že priame volanie System.gc() nezaručuje okamžité spustenie zberača odpadu; JVM rozhodne, kedy ho spustí, na základe svojich interných algoritmov.