Araçlar ObjectAlloc: Canlı Baytların ve Genel Baytların Açıklaması


86

Uygulamamın (iPhone) belleğin ne yaptığını ve bunu ne zaman ve nerede yaptığını anlamak amacıyla Instument'ın ObjectAlloc aracını kullanıyorum.

Bu istatistiklerin temel bir açıklamasını gerçekten istiyorum:

  • Canlı Bayt
  • # Yaşıyor
  • #Geçici
  • Genel Bayt

Uygulamamın ne kadar bellek kullandığını hesaplamaya çalışırken, Canlı Baytlara mı yoksa Genel Baytlara mı bakmalıyım? Buna sızdırılmış bellek dahil mi? Geçici nesneler nelerdir?

Teşekkürler


6
başlıklarının üzerine geldiğinizde sütunların kısa açıklamaları olur.
Piotr Byzia

Yanıtlar:


110

ObjectAlloc programınızın çalıştığı süre boyunca tüm bellek ayırma ve serbest bırakmayı izler.

Living bytes, or Net bytesBaşvurunuz Eğer zaman çizelgesinde seçmek anda kullanıyor ne kadar bellek olduğunu. Sızan bellek hiçbir zaman serbest bırakılmadığından, buna sızan bellek de dahildir.

#Livingbelirli bir boyuttan / nesne türünden kaç tane ayırmanın meydana geldiğidir (ve hala tahsis edilmektedir) Bu, sızıntıları ararken çok kullanışlıdır.

Örneğin, tekrar tekrar bir eylem gerçekleştirirseniz (modal görünüm denetleyicisinden gelen gibi) ve #Livingbir nesnenin her seferinde aynı miktarda büyüdüğünü görürseniz , o zaman muhtemelen bu nesneleri sızdırıyorsunuzdur. Daha sonra detaya inip nesneleri ayıran tam kod satırını görerek onaylayabilir ve hatta her birinin oluşturulduğu zaman indeksini görebilirsiniz.

Overall bytesserbest bırakılan belleği içerir. Bu sayıyı performans optimizasyonu amacıyla izlemek yararlıdır, ancak yalnızca mevcut bellek ayak izinizi görmeye veya sızıntıları aramaya çalışıyorsanız değil.


3
Genel Baytlar açısından neyi optimize etmeye çalışırsınız? Sayıyı küçük tutmaya çalışmak daha iyi performans anlamına mı geliyor?
Dan Rosenstark

4
Evet doğru. Performans sorunlarının yaygın bir nedeni, yanlışlıkla aynı kodu birden çok kez çalıştırmaktır. Tahsisler aracı, fark etmenin iyi bir yolu olabilir. Örneğin, fazla nesneler sızdırılmasa bile, "Neden o nesneden 3 tane yaptım? Sadece bir tane olmalıydı!" Diyebilirsiniz.
Ken Aspeslagh

2
Canlı bayt, uygulamanızın şu anda kullandığı bellek miktarıdır. Genel, uygulamanızın yaptığı tüm tahsislerin toplamıdır (o zamandan beri boşaltılan bellek dahil)
Ken Aspeslagh

1
@KenAspeslagh, eğer aynı zamanda bırakılmış nesneleri de içeriyorsa, neden genel baytları önemseyeyim?
Dejell

3
Performans için ayar yapıyorsanız, uygulamanızın çalışırken yaptığı ayırma sayısını en aza indirmek istersiniz (söz konusu tahsisleri sızdırmasanız bile). Aşırı tahsisler genellikle yanlış yaptığınızın bir göstergesi olabilir.
Ken Aspeslagh

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.