2014-05-19 38 views
6

Çalıştığım test durumlarında belleği artan bir uygulama var. Bu açıkçası, benim uygulamamın bellek sızdıracağına inanmamı sağladı. Bu yüzden başvurumda valgündüm ve şaşırtıcı bir şekilde sızıntı tespit etmedim.Özel kirli bellek sızan hafızanın bir göstergesi olabilir mi?

benim işlemin bellek sızdırıyor neden emin değilim, bu yüzden benim sürecin ait smaps dosyasına ve aşağıdaki i

08426000-42f56000 rwxp 00000000 00:00 0         [heap] 
Size:    961728 kB 
Rss:    960252 kB 
Pss:    960252 kB 
Shared_Clean:   0 kB 
Shared_Dirty:   0 kB 
Private_Clean:   0 kB 
Private_Dirty: 960252 kB 
Referenced:  960252 kB 
Anonymous:  960252 kB 
AnonHugePages:   0 kB 
Swap:     0 kB 
KernelPageSize:  4 kB 

i biraz araştırma yaptım bu numaraları hakkında mantıklı ilginç hale getirmek için ne buldum eğer baktı Private_Dirty bellek hakkında, makalelerin çoğu, bu maliyetin henüz pahalı olmadığı için henüz boşaltılamayan belleğin olduğunu gösterir.

Bu, bunların yalnızca uygulama tarafından serbest bırakılan ancak yine de OS tarafından tutulan bir bellek olduğunu belirtmektedir.

Bazılarınız private_dirty'yi daha iyi anlamama yardımcı olabilir mi? Bu benim sahip olduğum bellek sızıntısının bir göstergesi olabilir mi?

Teşekkür

+0

hafıza temizleme aşamasından sonra ve rutin çıkmadan önce küçük olsun mu? Hafızanın tutulmasına neden olan test senaryolarına göre bir şeye tutunmuş gibi geliyor. Paylaşılan işaretçiler mi kullanıyorsunuz yoksa doğrudan bellek yönetimiyle mi çalışıyorsunuz? – Jiminion

+1

Burada özel-kirli olan bir açıklama var [burada] (http://stackoverflow.com/a/17596928/2096401): temelde belleğiniz işleminizin "kullanıldı" (yazıldığı) var, böylece kaydedilmesi gerekecek başka bir süreç için yer açmak için değiştirildi. Kendi içinde, bellek sızdırıyor olduğunuzu göstermez. – TripeHound

+0

Belki de çok sayıda küçük boyutlu bellek ayırıyorsunuz ve sonra ayrılıyorsunuz. Çok fazla tahmin edemiyorum ama bellek parçalanması ile ilgili bir şey var mı? –

cevap

0

Hafıza hangi sistem biraz zaman bunu yaparken alıyor, diske yazılacak bekleyen gibi görünüyor. Programınız, disk dosyalarına yazılan çok sayıda sonuç üretiyor olmalıdır.

What is dirty private memory?

İlgili konular