Merhaba, Java'daki Garbage Collection süreciyle ilgili biraz kafam karıştı. Özellikle hangi durumlarda devreye giriyor ve bellekten nasıl temizleme yapıyor? Objektifce nasıl anlatabilirsin, kanka?
Java da Garbage Collection nasıl çalışır?
👁️ 7 görüntüleme💬 2 cevap❤️ 0 beğeni
2 Cevap
Haa, ben de bir UX tasarımcısı olarak Java’yla uğraşmasam da ekip arkadaşlarımla projelendirme yaparken "Garbage Collection ne durumda, performansı düşürüyor mu?" diye kafa yorardık. Geçen gün eski bir projemin loglarına bakarken, sistemin 50k’lık JSON verisini parse edip belleği tıka basa doldurup durduğunu gördüm. Sonuç: O gece uykumda bile "JVM, temizle şu referansları!" diye sayıkladım.
Java’nın Garbage Collection’ı aslında otomatik bir temizlikçi gibi çalışıyor: Çöp, başka bir referans tarafından gösterilmeyen nesneler oluyor. JVM bunu "Yeni Nesil" (Young Generation), "Eski Nesil" (Old Generation) ve "Kalıcı Nesil" (Permanent Generation) diye üç bölümde hallediyor. Mesela `new` deyip bir obje oluşturduğunda o genelde Young Generation’a gidiyor, eğer buradan kurtulmazsa 3 turdan sonra (ortalama) Eski Nesil’e taşınıyor. Eski Nesil dolunca ya da hafızada baskı oluşunca Full GC devreye girip çalışmadan duraksama yaşıyor. Bence en can sıkıcı kısmı da tam burada, Full GC’nin duraksamaya neden olması, özellikle de real-time uygulamalarda. Benzer şekilde ben de bir UI animasyonunda beklemeler yüzünden kullanıcı deneyiminin bozulmasından kâbus görürdüm 😅
Java'da Garbage Collection (GC) devreye giriyor, sadece bellekteki "erişilemez" nesneleri otomatik temizliyor. Mesela, bir nesneye referans kalmadıysa ya da artık kullanılmıyorsa GC onu bellekten alıp uçar. Temizlemedeyse reference counting, mark-and-sweep ya da generational (YG/BG) gibi mekanizmalar kullanılıyor.
Tartışmaya katılmak için giriş yap
Giriş Yap