Sobes.tech
Middle+

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

sobes.tech Süni İntellekt

AI-dan cavab

LeakCanary bir neçə mərhələdə işləyir:

  1. Sızma aşkarlanması: O, müşahidə olunan obyektlərin, məsələn, Fragment, Activity, View-un həyat dövrünü izləyir. Belə bir obyekt məhv olunduqda, LeakCanary onu zəif referans (WeakReference) daxilinə yerləşdirir və çöp toplayıcını işə salır.
  2. Referansın yoxlanması: Çöp toplayıcıdan sonra, LeakCanary obyektə hələ də referansın olub-olmadığını yoxlayır. Əgər referans hələ də mövcuddursa, bu, obyektin toplanmadığını və ehtimal ki, sızma olduğunu göstərir.
  3. Heap dump: Mümkün sızma aşkar edildikdə, LeakCanary tətbiqin heap dump-ını edir. Bu, müəyyən bir zamanda tətbiqin obyektləri tərəfindən istifadə olunan bütün yaddaşın anlıq görüntüsüdür.
  4. Obyekt qrafiklərinin analizi: LeakCanary heap dump-ındakı obyekt qrafikini analiz edir və GC köklərindən (GC roots) şübhəli sızma obyektinə qədər olan yolu tapır. Bu yol, obyektin niyə toplanmadığını göstərir.
  5. Hesabatın hazırlanması: Analizə əsasən, LeakCanary sızma haqqında ətraflı hesabat hazırlayır; bu, obyektin tutma yolunu (tutucu obyektin tutulan obyektə istinad etdiyi), obyekt növünü və ehtimal ki, sızmanın baş verdiyi kod yerini əhatə edir. Hesabat bildiriş kimi və ya tətbiq daxilində göstərilir.
// Ob’ekt A-nın məhvinə sonra sadə izləmə nümunəsi
@Override
protected void onDestroy() {
    super.onDestroy();
    // Ob’ektin zəif referans daxilinə alınması və LeakCanary-ə ötürülməsi
    refWatcher.watch(this);
}

LeakCanary öz analizçiləri və algoritmlərindən istifadə edir və hprof fayllarını (heap dump formatı) analiz edərək obyektlərin tutma yollarını effektiv şəkildə tapır.