magnify
Home Genel Memory Leak’in Tanımı ve Önemi
formats

Memory Leak’in Tanımı ve Önemi

Tarih 26 Ocak 2010 yazar içinde Genel

“Memory leak”, programın kullandığı hafıza ile işi bittiği halde ilgili hafıza bloğunu serbest bırakmaması durumudur. Bu durum;

Gerçekte kullanılmayan hafıza bloklarının referans edilmeye devam edilmesinden veya
Native resource’ların düzgün bir şekilde serbest bırakılmamasından kaynaklanmaktadır. Zaman içerisinde programın sürekli hafıza kullanması, fakat kullandığı hafızayı işi bittiğinde bırakmaması, memory leak’in giderek büyümesine bundan dolayı yeterince uzun süre çalışan uygulamalarda sistem kaynaklarının kritik miktarlarda tüketilmesine ve uygulamanın hata verip kapanmasına sebep olmaktadır.

Windows bir process’de en fazla 10.000 GDI nesnesine ve 10.000 kullanıcı nesnesine izin vermektedir.
C# programlama dili CLR aracılığı ile programcılara managed bir ortam sağlamaktadır, bu şekilde hafıza yönetimini CLR’ın sağlamış olduğu garbage collector yürütmektedir. Garbage collector hafızada referans edilmeyen, kullanımı sona ermiş olan hafıza bloklarını bulup, serbest bırakmaktadır. Fakat hâlen referans olarak gösterilen ve kullanılmasa da kullanımda görünen hafıza bloklarına ve unmanaged (native) kaynaklara dokunmamaktadır. Bu yüzden garbage collector’un memory leak’lere engel olduğuna dair bir kanıya sahip olmak oldukça yanlıştır. Çünkü memory leak durumunda kullanımı sona ermiş olan hafıza bloğu halen referans edilmeye devam edildiğinden veya unmanaged (native) kaynak kullanılmaya devam edildiğinden garbage collector tarafından bu hafıza bloğu serbest bırakılmayacaktır.

Garbage collector’un memory leak durumundan haberi bulunmamaktadır, garbage collector sadece referans olarak gösterilmeyen, kullanımı sona ermiş hafıza bloklarını serbest bırakmaktadır.
Memory leak’e sahip bir programın kullandığı hafıza zaman içerisinde giderek arttığı gibi, kullanılan CPU yüzdesi de giderek artacaktır. Genel anlamda memory leak’ın sadece hafızayı etkileyeciğini düşünmek büyük bir yanılgıdır. Çünkü programın kullandığı hafıza miktarı arttıkça, garbage collector’un analiz edeceği hafıza miktarı da artmaktadır. Garbage collector’un analizinin yoğun CPU tüketen bir işlem olduğunu hatırlarsak, CPU’nun neden yüksek miktarda kullanılacağını anlamış oluruz.

Memory leak probleminden dolayı yüksek CPU tüketen uygulamalar, kullanılmasalar dahi garbage collector nedeniyle yüksek CPU tüketmeye devam edebilirler. Çünkü memory belirli bir sınıra geldiğinde garbage collector’un çalışma sıklığı artacaktır. Kullanıcı programı kullanmasa dahi garbage collector analizleri CPU tüketmeye devam edecektir.

 
Etiketler:
 Share on Facebook Share on Twitter Share on Reddit Share on LinkedIn
Memory Leak’in Tanımı ve Önemi için yorumlar kapalı  comments 
© Hakan Uzuner
credit