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.