Middle+
Как LeakCanary обнаруживает утечку памяти?
sobes.tech AI
AIден жооп
LeakCanary birnäçe basgançakda işlýär:
- Çüýşäniň tapylmagy: Ol gözegçilik edilýän obýektleriň, meselem Fragment, Activity, View, durmuş dövrüni yzarlýar. Şeýle obýekt ýykylsa, LeakCanary ony gowşak salgysy (WeakReference) içine ýerleşdirýär we ýygnaýjy ýygnamagy başlaýar.
- Salgynyň bar bolmagyny barlamak: Ýygnaýjy ýygnamagyndan soň, LeakCanary obýekt bilen hələ-de salgynyň bardygyny barlaýar. Eger bar bolsa, bu obýektiň ýygnalmadygyny we muş algy edilýänligini görkezýär.
- Heap dump: Mümkin bolan ýygnaýjy tapylsa, LeakCanary programmaň heap dump-yny edýär. Bu, belli bir wagtyň içinde programmaň obýektleri tarapyndan eýeçiliginde bolan ähli ýadyň suratydyr.
- Obýektleriň grafigini seljermek: LeakCanary heap dump-yndaky obýektleriň grafigini seljýär we GC köklerinden (GC roots) şübheli ýygnaýjy obýektine çenli ýol tapýar. Bu ýol, obýektiň näme üçin ýygnalmadygyny görkezýär.
- Hasabat döretmek: Analiz esasynda LeakCanary ýygnaýjy barada jikme-jik hasabat döretýär, şol sanda obýektiň saklaýjy ýoly (obýekt, saklaýan obýektiň salgysy), obýekt görnüşi we kodda ýakynlaşyk bilen ýygnaýjy bolup biljek ýer. Hasabat bildiriş hökmünde ýa-da programmaň içindäki görnüşde görkezilýär.
// Obýekt A-nyň ýykylmagyndan soň ýönekeý yzarlama mysaly
@Override
protected void onDestroy() {
super.onDestroy();
// Obýekti WeakReference içine al we LeakCanary-e ugradyp goý
refWatcher.watch(this);
}
LeakCanary öz parserleri we algoritmleri bilen hprof faýllaryny (heap dump formaty) seljýär we obýektleriň saklaýjy ýollaryny netijeli tapýar.