Middle+
Как LeakCanary обнаруживает утечку памяти?
sobes.tech Süni İntellekt
AI-dan cavab
LeakCanary bir neçə mərhələdə işləyir:
- 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.
- 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.
- 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.
- 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.
- 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.