Middle+
Как LeakCanary обнаруживает утечку памяти?
sobes.tech yapay zeka
AI'dan gelen yanıt
LeakCanary birkaç aşamada çalışır:
- Sızıntı Tespiti: İzlenen nesnelerin yaşam döngüsünü takip eder, örneğin Fragment, Activity, View. Böyle bir nesne yok edildiğinde, LeakCanary onu zayıf bir referansa (WeakReference) yerleştirir ve çöp toplayıcıyı başlatır.
- Referans Kontrolü: Çöp toplayıcıdan sonra, LeakCanary nesneye hala bir referans olup olmadığını kontrol eder. Eğer referans hala varsa, nesnenin toplanmadığı ve muhtemelen bir sızıntı olduğu anlamına gelir.
- Heap dump: Olası bir sızıntı tespit edilirse, LeakCanary uygulamanın heap dump'ını alır. Bu, belirli bir zamanda uygulamadaki nesnelerin kapladığı tüm belleğin bir anlık görüntüsüdür.
- Nesne grafiği analizi: LeakCanary, heap dump'taki nesne grafiğini analiz eder ve çöp toplayıcı kökleri (GC roots) ile şüpheli sızıntı nesne arasındaki yolu bulur. Bu yol, nesnenin neden toplanmadığını gösterir.
- Rapor oluşturma: Analize dayanarak, LeakCanary sızıntı hakkında ayrıntılı bir rapor oluşturur; bu rapor, nesnenin tutma yolunu (tutucu nesne, tutulan nesneye referans verir), nesne türünü ve muhtemelen sızıntının gerçekleştiği kod yerini içerir. Rapor, bildirim olarak veya uygulama içinde gösterilir.
// Nesne A'nın yok edilmesinden sonra basit bir izleme örneği
@Override
protected void onDestroy() {
super.onDestroy();
// Nesneyi WeakReference içine al ve LeakCanary'e ilet
refWatcher.watch(this);
}
LeakCanary, kendi analizcileri ve algoritmalarıyla hprof dosyalarını (heap dump formatı) analiz eder ve nesne tutma yollarını etkin bir şekilde bulur.