Bellek Profilcisi, Android Profil Aracı takılmaya yol açabilecek bellek sızıntılarını ve bellek kaybını tanımlamanıza yardımcı olur. donuyor, hatta uygulama kilitleniyor. Uygulamanızın belleğinin gerçek zamanlı bir grafiğini gösterir kullanır ve yığın dökümünü yakalamanızı, atık toplamaları zorlamanızı ve bellek ayırmaları.
Bellek Profil Aracı'nı açmak için şu adımları uygulayın:
- Görünüm > Araç Pencereleri > Profiler (Profil'i de tıklayabilirsiniz simgesini tıklayın.
- Android'den profilini oluşturmak istediğiniz cihaz ve uygulama işlemini seçin Profiler araç çubuğu. USB üzerinden bir cihaz bağladığınız halde cihazı görmüyorsanız emin olmak için USB üzerinden hata ayıklama etkinleştirildi.
- Bellek Profil Aracı'nı açmak için BELLEK zaman çizelgesinde herhangi bir yeri tıklayın.
Alternatif olarak, komut satırından uygulama belleğinizi incelemek için dumpsys ve ayrıca logcat'teki GC etkinliklerini inceleyin.
Uygulama belleğinizin profilini neden kullanmalısınız?
Android, yönetilen bellek ortamı - uygulamanızın artık bazı nesneleri, çöp toplayıcı kullanılmayan belleği yığına geri yükler. Android, mobil cihazları nasıl bulur? kullanılmayan bellek sürekli olarak iyileştiriliyor, ancak bir noktada üzerinde çalıştığınızda, sistemin kodunuzu kısa süreliğine duraklatması gerekir. Duraklatmalar çoğu zaman bir şey değildir. Ancak uygulamanız, belleği sistemden daha hızlı ayırıyorsa toplayacaksa yeteri kadar yer açarken uygulamanız gecikebilir. bir bellek sınırı belirleyerek ayırmanızı sağlar. Gecikme, uygulamanızın atlamasına neden olabilir karelere ve görünür yavaşlığa neden olabilir.
Uygulamanız yavaş çalışmasa bile bellek sızdırıyorsa bu hafızayı daha iyi koruyabiliriz. Bu davranış geri kalanları yavaşlatabilir gereksiz atık toplamayı zorunlu kılarak sistemin bellek performansının düşmesine neden olabilir. etkinlikler. Sonuç olarak sistem, hafızada bulabilirsiniz. Ardından kullanıcı uygulamanıza döndüğünde, uygulama tamamen yeniden başlatılmalıdır.
Bu sorunları önlemek için Bellek Profili Aracı'nı kullanarak takip etmek için:
- Zaman çizelgesinde bu soruna neden olabilecek istenmeyen bellek ayırma sorunlarına neden oluyor.
- Herhangi bir zamanda hangi nesnelerin bellek kullandığını görmek için Java yığınını boşaltın gerekir. Uzun süre boyunca birden fazla yığın dökümleri olması, bunların tespit edilmesine yardımcı olabilir olabilir.
- Normal ve aşırı kullanıcı etkileşimleri sırasındaki bellek tahsislerini kodunuzun tek bir uygulamada çok fazla nesne ayırdığı yeri veya sızdıracak nesneleri ayırmak için bu tür stratejileri kullanabilirsiniz.
Uygulamanızın belleğini azaltabilecek programlama uygulamaları hakkında bilgi için Uygulamanızın belleğini yönetme başlıklı makaleyi inceleyin.
Memory Profiler'a genel bakış
Bellek Profil Aracı'nı ilk açtığınızda, içinde bulunduğunuz depolama alanının ayrıntılı zaman çizelgesini uygulamanın bellek kullanımını ve atık toplamayı zorlamak, yığın yakalamayı sağlayan araçlara erişme ve bellek ayırmalarını kaydetmenizi sağlar.
Şekil 1'de belirtildiği gibi, Bellek Profil Aracı'nın varsayılan görünümünde takip etmek için:
- Atık toplama etkinliğini zorunlu kılan bir düğme.
-
Yığın dökümü yakalama düğmesi.
Not: Hafıza kaydetme düğmesi ayırmalar, yalnızca şu durumlarda yığın dökümü düğmesinin sağında görünür: Android 7.1 (API düzeyi 25) veya önceki sürümleri çalıştıran bir cihaza bağlı
- Profil oluşturucunun belleği ne sıklıkta yakalayacağını belirten bir açılır menü tahsisler. Uygun seçeneği belirlemeniz, profil oluştururken uygulama performansını iyileştirme.
- Zaman çizelgesini yakınlaştırmak/uzaklaştırmak için düğmeler.
- Canlı bellek verilerine atlama düğmesi.
- Etkinlik durumlarını, kullanıcı girişi etkinliklerini ve ekran döndürme etkinlikleri.
- Şunları içeren bellek kullanım zaman çizelgesi:
- Her bellek kategorisinin kullandığı bellek miktarının yığınlı grafiği soldaki y ekseniyle ve renk anahtarıyla belirtildiği şekilde dokunun.
- Kesikli çizgi, belirtilen şekilde ayrılan nesnelerin sayısını gösterir y ekseninde.
- Her atık toplama etkinliği için bir simge.
Ancak Android 7.1 veya önceki sürümleri çalıştıran bir cihaz kullanıyorsanız profil oluşturma verileri varsayılan olarak görünür durumdadır. "Gelişmiş" yazan bir mesaj görürseniz profil oluşturma özelliği, seçilen işlem için kullanılamıyor" yapmanız gerekenler gelişmiş profil oluşturmayı etkinleştirme göz atın:
- Etkinlik zaman çizelgesi
- Ayrılan nesne sayısı
- Çöp toplama etkinlikleri
Android 8.0 ve sonraki sürümlerde, hata ayıklama için gelişmiş profil oluşturma her zaman etkindir
Hafıza nasıl sayılır?
Bellek Profil Aracı'nın üst kısmında (şekil 2) gördüğünüz sayılar, uygulamanızın taahhüt ettiği tüm özel bellek sayfalarının Android sistemi. Bu sayıya sistemle paylaşılan sayfalar veya diğer uygulamalar.
Bellek sayısındaki kategoriler şunlardır:
- Java: Java veya Kotlin kodundan ayrılmış nesnelerden gelen bellek.
Yerel: C veya C++ kodundan ayrılan nesnelerdeki bellek.
Uygulamanızda C++ kullanmasanız bile bir miktar yerel bellekle karşılaşabilirsiniz Android çerçevesi, öğeleri işlemek için yerel bellek kullandığından sizin adınıza çeşitli görevlerde (ör. resim öğeleri ve diğer grafikler (yazdığınız kod Java veya Kotlin dilinde olsa bile)
Grafikler: Piksellerin gösterildiği grafik arabellek sıraları için kullanılan bellek (GL yüzeyleri, GL dokuları vb. dahil olmak üzere) ekranda görüntülenir. ( CPU ile paylaşılan bellektir, özel GPU belleği değildir.)
Yığın: Uygulamanızda hem yerel hem de Java yığınları tarafından kullanılan bellek. Bu genellikle uygulamanızın çalıştırdığı iş parçacığı sayısıyla ilgilidir.
Kod: Uygulamanızın kod ve kaynaklar (ör. dex) için kullandığı bellek bayt kodu, optimize edilmiş veya derlenmiş dex kodu, .so kitaplıkları ve yazı tipleri.
Diğerleri: Sistemin nasıl yapacağından emin olmadığı, uygulamanız tarafından kullanılan bellek kategorize edin.
Ayrılmış: Uygulamanız tarafından ayrılan Java/Kotlin nesnelerinin sayısı. Bu, C veya C++'ta ayrılan nesneleri saymaz.
Bu ayırma, Android 7.1 ve önceki sürümleri çalıştıran bir cihaza bağlandığında sayısı yalnızca Bellek Profilcisi'nin çalışan bir uygulamadır. Böylece, profil oluşturmaya başlamadan önce ayrılan nesneler yardımcı olur. Ancak Android 8.0 ve sonraki sürümler, cihaz üzerinde bir uygulama içerir. tüm ayırmaları izleyen bir profil oluşturma aracıdır; dolayısıyla bu sayı her zaman şuralarda uygulamanızda bekleyen Java nesnelerinin toplam sayısını temsil eder: Android 8.0 ve sonraki sürümler.
Önceki Android Monitor aracının bellek sayılarıyla karşılaştırıldığında, yeni Bellek Profil Aracı, belleğinizi farklı şekilde kaydeder. Bu nedenle, bellek kullanımı artık daha fazla. Bellek Profil Aracı, bazı ekstra kategorileri izler Bunlar toplamı artırır, ancak yalnızca Java yığın belleğiyle ilgileniyorsanız "Java" önceki araçtaki değere benzer olmalıdır. Java numarası büyük olasılıkla Android'de gördüğünüz sayıyla tam olarak eşleşmese de Monitör. Bu yeni sayı, denetlenmesi gereken tüm fiziksel bellek sayfalarını Zygote'tan çatallanmasından dolayı uygulamanızın Java yığınına ayrılır. Bu uygulamanızın ne kadar fiziksel belleğinin olduğunu doğru bir şekilde gösterir yardımcı olur.
Bellek ayırmalarını görüntüleme
Bellek ayırmaları, bellek tahsis edildi. Bellek Profil Aracı özellikle, aşağıdaki adımları izleyin:
- Ne tür nesnelerin ayrıldığı ve bunların ne kadar alan kullandığı.
- Hangi iş parçacığında olduğu dahil olmak üzere her ayırmanın yığın izlemesi.
- Nesnelerin ayrıldığı zaman (yalnızca Android 8.0 yüklü bir cihaz kullanılırken veya üzeri).
Java ve Kotlin ayırmalarını kaydetmek için şunu seçin: Java / Kotlin tahsislerini kaydetme, ardından Kaydet'i seçin. Cihazda Android 8 veya sonraki bir sürüm yüklüyse Bellek Profili Aracı kullanıcı arayüzü, devam eden kaydediyorum. Kaydın üst kısmındaki mini zaman çizelgesiyle etkileşimde bulunabilirsiniz. (örneğin, seçim aralığını değiştirmek için). Kaydı tamamlamak için Durdur 'u seçin.
Android 7.1 ve önceki sürümlerde bellek profil aracı eski ayırmayı kullanır kayıt, siz tıklayana kadar kaydı zaman çizelgesinde gösterir Durdur.
Zaman çizelgesinde bir bölge seçtikten sonra (veya kaydı bitirdikten sonra) Android 7.1 veya daha eski bir sürümü çalıştıran bir cihazla oturum açınsa ayrılanların listesi nesneler sınıf adına göre gruplandırılır ve sınıflarına göre sıralanır. yığın sayısı.
Tahsis kaydını incelemek için şu adımları uygulayın:
- Olağan dışı yığın sayılarına sahip ve alışılmadık şekilde büyük yığınlara sahip nesneleri bulmak için listeye göz atın.
bir şey olabilir. Bilinen sınıfları bulmanıza yardımcı olması için Sınıf Adı'nı tıklayın.
sütun başlığını alfabetik olarak sıralayın. Ardından bir sınıf adını tıklayın. İlgili içeriği oluşturmak için kullanılan
Sağ tarafta Örnek Görünümü bölmesi görünür ve her bir örneği
sınıfını kullanır.
- Alternatif olarak, Filtrele'yi tıklayarak nesneleri hızlı bir şekilde bulabilirsiniz. , veya Ctrl+F (Mac'te Command+F) tuşlarına basıp bir sınıf veya paket girerek adını girin. İsterseniz yöntem adına göre de arayabilirsiniz Açılır menüden çağrı yığınına göre düzenleyin. Normal dönüşüm izleme özelliğini ifadeleri için Regex'in yanındaki kutuyu işaretleyin. Şu seçeneğin yanındaki kutuyu işaretleyin: Arama sorgunuz büyük/küçük harfe duyarlıysa büyük/küçük harf eşleştir.
- Örnek Görünümü bölmesinde bir örneği tıklayın. Arama Grubu sekmesi aşağıda bu örneğin nereye ve hangi iş parçacığında ayrıldığını gösterir.
- Arama Grubu sekmesinde, herhangi bir satırı sağ tıklayın ve Kodu düzenleyicide açmak için Kaynağa Atla'yı tıklayın.
Ayrılmış nesneler listesinin üzerindeki iki menüyü kullanarak hangi verilerin nasıl düzenleneceğini gösteren bir listedir.
Soldaki menüden incelenecek yığını seçin:
- varsayılan yığın: Sistem tarafından herhangi bir yığın belirtilmediğinde.
- image yığın: Aşağıdaki özelliklere sahip sınıfları içeren sistem başlatma görüntüsü: sırasında önceden yüklenir. Buradaki ayırmaların hiçbir zaman taşınmayacağı veya git.
- zygote yığın: Uygulama işleminin çatallandığı, yazma üzerinde kopyalama yığını Android sistemi içinde.
- uygulama yığını: Uygulamanızın bellek ayırdığı birincil yığın.
- JNI yığın: Java Yerel Arayüzü'nün (JNI) nerede olduğunu gösteren yığın referanslar ayrılır ve serbest bırakılır.
Sağdaki menüden, ayırmaların nasıl düzenleneceğini seçin:
- Sınıfa göre düzenle: Tüm ayırmaları sınıf adına göre gruplandırır. Bu varsayılandır.
- Pakete göre düzenle: Tüm ayırmaları paket adına göre gruplandırır.
- Çağrı yığınına göre düzenle: Tüm ayırmaları karşılık gelen çağrı yığını.
Profil çıkarma sırasında uygulama performansını iyileştirme
Profil çıkarma sırasında uygulama performansını iyileştirmek için bellek profil aracı örnekleri bellek ayırmaları varsayılan olarak ayarlanır. API çalıştıran cihazlarda test yaparken 26. düzeyde veya daha yüksek bir düzeye sahipseniz bu davranışı Atama İzleme açılır menüsünü kullanabilirsiniz. Mevcut seçenekler şunlardır: şöyle olur:
- Tam: Bellekteki tüm nesne ayırmalarını yakalar. Bu, varsayılan ayardır bu davranıştan yararlanmaktır. Örneğin, çok sayıda nesne ayırıyorsa, doğrudan bağlı değilken uygulamanız gerek.
- Örneklenmiş: Bellekte nesne ayırmalarını düzenli aralıklarla örnekler. Bu varsayılan seçenektir ve uygulama performansını daha az etkiler. profil çıkarma. Kısa bir süre içinde çok sayıda nesne dağıtan uygulamalar görülebilir yavaşlamalar sergilemeye devam ediyor.
- Kapalı: Uygulamanızın bellek tahsisini izlemeyi durdurur.
Global JNI referanslarını göster
Java Native Interface (JNI), Java koduna ve yerel uygulamaya izin veren bir çerçevedir bir kod bulmanız gerekir.
JNI referansları yerel kod tarafından manuel olarak yönetildiğinden Çok uzun süre aktif kalacak yerel kod tarafından kullanılan Java nesneleri. Bazı nesneler açık bir JNI referansı olmadan silinirse Java yığını ulaşılamaz hale gelebilir önce açıkça silinecek. Ayrıca, küresel çapta faaliyet gösteren JNI referans sınırı.
Bu tür sorunları gidermek için Bellek Profili'ndeki JNI yığın görünümünü kullanarak tüm genel JNI referanslarına göz atabilir, bunları Java türlerine ve yerel çağrıya göre filtreleyebilir gruplar. Bu bilgiler sayesinde, global JNI referanslarının ne zaman ve nerede oluşturulur ve silinir.
Uygulamanız çalışırken zaman çizelgesinde Sınıf listesinin üstündeki açılır menüden JNI yığını'nı inceleyin ve seçin. Daha sonra yığındaki nesneleri normalde yaptığınız gibi inceleyebilir ve Atama Yığını sekmesindeki nesneler (JNI referanslarının nerede olduğunu) Şekil 4'te gösterildiği gibi kodunuzda ayrılıp serbest bırakılır.
Uygulamanızın JNI kodu için bellek tahsislerini incelemek üzere uygulamanızı dağıtmanız gerekir .
JNI hakkında daha fazla bilgi için JNI ipuçlarını inceleyin.
Yerel Bellek Profil Aracı
Android Studio Memory Profiler, uygulamalar için Yerel Bellek Profil Aracı içerir .
Yerel Bellek Profil Aracı, yerel öğelerde nesnelerin ayırmalarını/ayırmalarını izler zaman aralığı için bir kod oluşturur ve şu bilgileri sağlar:
- Ayırma:
malloc()
veyanew
aracılığıyla ayrılan nesnelerin sayısı operatörünü kullanabilir. - Deallocations:
free()
veya Seçilen dönem boyuncadelete
operatörü. - Tahsis Boyutu: Bu tarih aralığındaki tüm ayırmaların bayt cinsinden toplam boyutu seçilen dönem.
- Anlaşma konumları Boyutu: Boş bırakılan tüm belleğin bayt cinsinden toplam boyutu seçilen dönem boyunca kullanılabilir.
- Toplam Sayı: Ayırma Sayısı sütunundaki değerden Anlaşma konumları sütunu.
- Kalan Boyut: Ayırma Boyutu sütunundaki değerden değerini Anlaşma Konumu Boyutu sütununda görebilirsiniz.
Android 10 ve sonraki sürümleri çalıştıran cihazlarda yerel ayırmaları kaydetmek için Yerel tahsisleri kaydet'i, ardından Kaydet'i seçin. Kayıt siz Durdur'u tıklayana kadar devam eder , Ardından Bellek Profili Aracı kullanıcı arayüzü, ayrı bir ekrana geçer yerel kaydı gösterir.
Android 9 ve önceki sürümlerde Yerel ayırmaları kaydet seçeneği kullanılabilir.
Varsayılan olarak Yerel Bellek Profil Aracı, 32 baytlık örnek boyutu kullanır: Her 32 baytlık bellek ayrıldığında, belleğin anlık görüntüsü alınır. CEVAP daha küçük örnek boyutuyla daha sık anlık görüntüler elde edilir. Bu da, doğru verileri otomatik olarak kullanmanızı sağlar. Örnek boyutu ne kadar büyük olursa doğruluk oranı o kadar azalır ancak sisteminizde daha az kaynak tüketir ve performansı gösterir.
Yerel Bellek Profil Aracı'nın örnek boyutunu değiştirmek için:
- Çalıştır > Yapılandırmaları Düzenleyin.
- Sol bölmede uygulama modülünüzü seçin.
- Profil oluşturma sekmesini tıklayın ve etiketli alana örnek boyutunu girin Yerel bellek örnekleme aralığı (bayt).
- Uygulamanızı derleyip tekrar çalıştırın.
Yığın dökümü yakalayın
Yığın dökümü, yakalamanız gerekir. Özellikle, genişletilmiş kullanıcı oturumundan sonra bir yığın dökümü hale getirdiğimiz hafızada bulunan nesneleri göstererek bellek sızıntılarının tanımlanmasına yardımcı olabilir. olması gerektiğine inanmıyor.
Yığın dökümünü yakaladıktan sonra aşağıdakileri görüntüleyebilirsiniz:
- Uygulamanızın ne tür nesne ayırdığı ve her birinden kaç tane nesne ayırdığı.
- Her bir nesnenin ne kadar bellek kullandığı.
- Kodunuzda her bir nesneye yapılan referansların tutulduğu yer.
- Bir nesnenin ayrıldığı yere ait çağrı yığını. (Çağrı yığınları şu anda yığın dökümüyle yalnızca Android 7.1 ve önceki sürümlerde kullanılabilir. yığın dökümü kullanılır.)
Yığın dökümünü yakalamak için Yığın dökümünü yakala'yı, ardından Kaydet'i tıklayın. Yığın dökümü oluşturulurken Java bellek miktarı geçici olarak artabilir. Yığın dökümü, uygulamanızla aynı süreçte gerçekleştiğinden bu normaldir ve verilerin toplanması için bir miktar bellek gerektirir.
Profil oluşturucu, yığın dökümünü kaydetmeyi bitirdikten sonra Bellek Profili Aracı kullanıcı arayüzü gösteren ayrı bir ekrana geçer.
Dökümün ne zaman oluşturulduğu konusunda daha net olmanız gerekirse
yöntemini çağırarak uygulama kodunuzun kritik noktasında bir yığın dökümü oluşturabilir
dumpHprofData()
Sınıf listesinde aşağıdaki bilgileri görebilirsiniz:
- Ayırma sayısı: Yığındaki ayırma sayısı.
Yerel Boyut: Bu nesne türü tarafından kullanılan toplam yerel bellek miktarı (bayt cinsinden). Bu sütun yalnızca Android 7.0 ve sonraki sürümlerde görünür.
Android bu nedenle Java'da ayrılmış bazı nesnelere ait bellek gösterilir. şunun gibi bazı çerçeve sınıfları için yerel bellek kullanır:
Bitmap
Sığ Boyut: Bu nesne tarafından kullanılan toplam Java belleği miktarı türü (bayt cinsinden).
Tutulan Boyut: Tüm örnekler nedeniyle saklanan belleğin toplam boyutu (bayt cinsinden).
Ayrılmış nesneler listesinin üzerindeki iki menüyü kullanarak hangi yığın dökümlerini inceleyebilirsiniz.
Soldaki menüden incelenecek yığını seçin:
- varsayılan yığın: Sistem tarafından herhangi bir yığın belirtilmediğinde.
- uygulama yığını: Uygulamanızın bellek ayırdığı birincil yığın.
- image yığın: Aşağıdaki özelliklere sahip sınıfları içeren sistem başlatma görüntüsü: sırasında önceden yüklenir. Buradaki ayırmaların hiçbir zaman taşınmayacağı veya git.
- zygote yığın: Uygulama işleminin çatallandığı, yazma üzerinde kopyalama yığını Android sistemi içinde.
Sağdaki menüden, ayırmaların nasıl düzenleneceğini seçin:
- Sınıfa göre düzenle: Tüm ayırmaları sınıf adına göre gruplandırır. Bu varsayılandır.
- Pakete göre düzenle: Tüm ayırmaları paket adına göre gruplandırır.
- Çağrı yığınına göre düzenle: Tüm ayırmaları karşılık gelen çağrı yığını. Bu seçenek yalnızca kayıt sırasında yığın dökümünü yakalarsanız çalışır tahsisler. Buna rağmen yığında büyük olasılıkla Bu ayırmalar, ilk gösterim sırasında ayrı ayrı gösterilir. yalnızca sınıf adına göre listelenir.
Liste, varsayılan olarak Tutulan Boyut sütununa göre sıralanır. Sıralama için değerleri farklı bir sütunda bulunuyorsa sütunun başlığını tıklayın.
Sağdaki Örnek Görünümü penceresini açmak için bir sınıf adını tıklayın (Şekil 6'da gösterilmektedir). Listelenen her örnek aşağıdakileri içerir:
- Derinlik: Herhangi bir GC kökünden seçilene en kısa atlama sayısı örneğidir.
- Yerel Boyut: Bu örneğin yerel bellekteki boyutu. Bu sütun yalnızca Android 7.0 ve sonraki sürümlerde görünür.
- Sığ Boyut: Bu örneğin Java belleğindeki boyutu.
- Tutulan Boyut: Bu örneğin hakim olduğu bellek boyutu ( dominator ağacı).
Yığınınızı incelemek için şu adımları uygulayın:
- Olağan dışı yığın sayılarına sahip ve alışılmadık şekilde büyük yığınlara sahip nesneleri bulmak için listeye göz atın.
bir şey olabilir. Bilinen sınıfları bulmanıza yardımcı olması için Sınıf Adı'nı tıklayın.
sütun başlığını alfabetik olarak sıralayın. Ardından bir sınıf adını tıklayın. İlgili içeriği oluşturmak için kullanılan
Sağ tarafta Örnek Görünümü bölmesi görünür ve her bir örneği
sınıfını kullanır.
- Alternatif olarak, Filtrele'yi tıklayarak nesneleri hızlı bir şekilde bulabilirsiniz. , veya Ctrl+F (Mac'te Command+F) tuşlarına basıp bir sınıf veya paket girerek adını girin. İsterseniz yöntem adına göre de arayabilirsiniz Açılır menüden çağrı yığınına göre düzenleyin. Normal dönüşüm izleme özelliğini ifadeleri için Regex'in yanındaki kutuyu işaretleyin. Şu seçeneğin yanındaki kutuyu işaretleyin: Arama sorgunuz büyük/küçük harfe duyarlıysa büyük/küçük harf eşleştir.
- Örnek Görünümü bölmesinde bir örneği tıklayın. Referanslar
sekmesi görünür ve bu nesneye yapılan tüm başvuruları gösterir.
Alternatif olarak, örneğin tüm alanlarını görüntülemek için örnek adının yanındaki oku ve ardından bir alan adını tıklayın seçeneğini tıklayın. Bunun için örnek ayrıntılarını alanı sağ tıklayıp Örneğe Git'i seçin.
- Referanslar sekmesinde, bellek sızıntısı varsa sağ tıklayın ve Örneğe Git'i seçin. Bu, karşılık gelen örneği göstererek yığın dökümünden kendi örnek verilerini gösterir.
Yığın dökümünüzde, aşağıdakilerden herhangi birinin neden olduğu bellek sızıntılarını arayın:
Activity
,Context
veView
,Drawable
veActivity
veyaContext
kapsayıcısına referans verir.- Taşıyabilecek
Runnable
gibi statik olmayan iç sınıflarActivity
örneği. - Nesneleri gereğinden uzun süre tutan önbellekler.
Yığın dökümünü HPROF dosyası olarak kaydetme
Yığın dökümünü yakaladıktan sonra veriler yalnızca Bellek Profili Aracı'nda görüntülenebilir
profil oluşturucu çalışırken. Profil oluşturma oturumundan çıktığınızda,
yığın dökümü. Bu nedenle, daha sonra incelemek üzere kaydetmek isterseniz yığın dökümünü dışa aktarın
dönüştürülebilir. Android Studio 3.1 ve önceki sürümlerde Yakalamayı dosyaya aktar
düğmesi, araç çubuğunun sol tarafında, zaman çizelgesinin altındadır; inç
Android Studio 3.2 ve sonraki sürümlerde Yığın Dökümünü Dışa Aktar düğmesi
Oturumlar bölmesindeki her bir Yığın Dökümü girişinin sağına dokunun. Farklı Dışa Aktar
iletişim kutusunda dosyayı .hprof
dosya adı uzantısıyla kaydedin.
Örneğin,
jhat,
HPROF dosyasını Android biçiminden Java SE HPROF biçimine dönüştürmeniz gerekiyor.
Bu işlemi,hprof-conv
android_sdk/platform-tools/
dizini. hprof-conv
komutunu çalıştırın
komutu: orijinal HPROF dosyası ve dönüştürülen HPROF'nin yazılacağı konum
dosyası olarak kaydedebilirsiniz. Örnek:
hprof-conv heap-original.hprof heap-converted.hprof
Yığın dökümü dosyasını içe aktarma
Bir HPROF (.hprof
) dosyasını içe aktarmak için Yeni bir profil oturumu başlat'ı tıklayın.
Oturumlar bölmesini, Dosyadan yükle'yi ve dosyadan dosyayı seçin.
emin olun.
Ayrıca, bir HPROF dosyasını dosya tarayıcısından bir düzenleyici penceresi.
Bellek Profil Aracı'nda sızıntı algılama
Bellek Profili Aracı'nda yığın dökümünü analiz ederken
Android Studio'nun Activity
ve
Uygulamanızda Fragment
örnek.
Filtrenin gösterdiği veri türleri aşağıdakileri içerir:
- Kaldırılmış ancak hâlâ referans verilen
Activity
örnek. - Geçerli bir
FragmentManager
değerine sahip olmayan ancak yine deFragment
örnek bir referans noktası görevi görebilir.
Aşağıdaki gibi belirli durumlarda filtre yanlış sonucu verebilir: pozitif:
Fragment
oluşturuldu ancak henüz kullanılmadı.- Bir
Fragment
önbelleğe alınıyor ancakFragmentTransaction
kapsamında değil.
Bu özelliği kullanmak için önce bir yığın dökümü yakalayın veya bir yığın dökümü dosyasını içe aktarın Studio'ya yükleyebilirsiniz. Parçaları ve etkinlikleri göstermek için bellek sızıntısı varsa yığında Etkinlik/Parça Sızıntıları onay kutusunu seçin döküm bölmesini açın.
Belleğinizin profilini çıkarma teknikleri
Bellek Profil Aracı'nı kullanırken uygulama kodunuzu vurgulamalı ve olabilir. Uygulamanızda bellek sızıntılarını tetiklemenin bir yolu, işlemi yapmanız gerekir. Sızıntılar ekranın en üst kısmına çıkabilir ayırmalar yer alır. Ancak sızıntı ne kadar küçükse uygulamayı çalıştırın.
Bellek sızıntısını aşağıdaki yöntemlerden biriyle de tetikleyebilirsiniz:
- Cihazı dikey yönden yatay yöne döndürün ve farklı sıradayken tekrar tekrar arkaya döndürün
etkinlik durumlarını kontrol eder. Cihazı döndürmek çoğu zaman uygulamanın
Activity
,Context
veyaView
nesne algılandı çünkü sistemActivity
yeniden oluşturur ve bu nesnelerden birine başka bir yerde referansta bulunursa sistem, bu nesneyi çöpe atamaz. - Farklı etkinlik durumlarındayken uygulamanız ile başka bir uygulama arasında geçiş yapın ( Ana ekrana, ardından uygulamanıza geri dönün).
İpucu: Yukarıdaki adımları uygulamak için monkeyrunner testi bahsedeceğim.