Middle
Existují odkazy, které ukazují, jak funguje sběrač odpadu?
sobes.tech AI
Odpověď od AI
Ano, je možné vytvořit příklady, které demonstrují vliv sběrače odpadu.
// Příklad 1: Vytvoření velkého množství objektů
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)); // Vytvoření mnoha objektů
}
// V tuto chvíli může být volán sběrač odpadu pro uvolnění paměti
// pokud objekty v seznamu nejsou nikde jinde používány.
// I když není volán explicitně, aktivuje se podle potřeby.
// Vyprázdnění seznamu může potenciálně uvolnit paměť
objects.clear();
System.gc(); // Explicitní žádost o sběr odpadu (nezaručuje provedení)
}
static class DummyObject {
private int id;
public DummyObject(int id) {
this.id = id;
}
@Override
protected void finalize() throws Throwable {
// Metoda finalize je volána před sběrem odpadu (není garantováno a nedoporučuje se)
// System.out.println("Objekt s id: " + id + " je sbírán.");
}
}
}
// Příklad 2: Nastavení odkazů na null
public class GarbageCollectionDemo2 {
public static void main(String[] args) {
Object obj = new Object(); // Vytvoření objektu
System.out.println("Objekt vytvořen.");
obj = null; // Odstranění odkazu na objekt. Nyní je vhodný pro sběr odpadu.
System.out.println("Odkaz na objekt nastaven na null.");
System.gc(); // Explicitní žádost o sběr odpadu
}
}
Tyto příklady ukazují, jak tvorba velkého množství objektů nebo odstranění odkazů činí objekty vhodnými pro sběr odpadu. Je důležité pochopit, že volání System.gc() nezaručuje okamžité spuštění sběrače odpadu; JVM rozhoduje, kdy ho spustí, na základě svých interních algoritmů.