Memory Leak Nedir ?

 

“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.

2 thoughts on “Memory Leak Nedir ?

  1. Çok güzel bir açıklama olmuş teşekkürler. Ben işin çok fazla teknik kısmını bilmiyorum ama bu sorunu gidermenin bir yolu var mı?

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s