Sobes.tech
Middle+

Как LeakCanary обнаруживает утечку памяти?

sobes.tech yapay zeka

AI'dan gelen yanıt

LeakCanary birkaç aşamada çalışır:

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. 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.