Previous
Next

JAVA - Garbage Collector nedir?

by Cem Kefeli 2. Ekim 2009 04:19

JavaHerhalde birçoğumuz o meşhur "Segmentation Fault" hatası ile karşılaşmışızdır. Hatanın isminin zaten başlı başına can sıkıcı olması bir yana bir de üstüne üstlük hata nerede? hani ne oldu? nerede problem? gibi soruların bir çoğunu da oldukça canınız sıkıldıktan sonra cevaplamanız mümkün olabilecektir. Bu iş en çok da C/C++ kullanırken başınıza gelecektir. Çünkü C/C++ da bellek yönetimi tamamen uygulama geliştiricilerin tasarrufuna bırakılmıştır. Yani siz sisteminizin belleğinin bir byte'lık bir gözüne dahi istediğiniz gibi erişebilirsiniz. Bunun bizim için münkün olmasını sağlayan olay pointer(işaretçi) kavramıdır. İşaretçiler ile istediğimiz gibi istediğimiz her yere erişebiliriz. Zaten sorunlara yol açan olaylar da tam olarak burada başlıyor. İstediğimiz yerlere erişiyoruz ama bazen de erişmememiz gereken bir yere erişme imkanı da veriyor bize. Hiç bir kontrol de yapılmıyor derleyici tarafından. Yani 'arkadaşım sen buraya erişmeye çalışıyorsun ama bak burası başkası tarafından kullanılıyor, ya da senin sınırlarının dışında.' gibi bir hata ile bizi uyarmıyor. İşi tamamen bizim bilincimize bırakmış durumda. Çok bilinçli kullanılması gereken bir bellek yönetimine sahip olmak gerekiyor. Bir yandan güzel bir yandan kötü bir özellik. Olayın bir başka yönü ise oluşturduğumuz nesnelerin kullanılmadıkça bir kenarda birikmesi ve bir süre sonra bellek sızıntısı(Memory Leak)'na yol açması. Bu olay C/C++ kullanan bir çok yazılımda, işletim sistemleri dahil, sık görülen birşeydir. Nesneleri oluşturup önerildiği şekilde uygun yollar ile bellek alanlarını boşaltmazsanız sağda solda birikirler ve gereksiz yer kaplayıp işletim sistemini felakete sürükleyebilirler. Bu olay dinamik bellek yönetimi olarak adlandırılmaktadır.

Bu olaya seneler önce java el attığında dedi ki: 'Ben nesneye yönelik bir yazılım dili olduğuma göre böyle şeyler ile ilgilenmem. İşaretçi kavramı filan benim için yoktur, yok gibidir. Benim gözümde herşey nesnedir. Dolayısı ile bellekte nesneler tutulur. Bellek yönetimine gelince o konuda da yazılımcıların işini çok kolaylaştıracak birşey sunuyorum. O da Garbage Collector(Çöp Toplayıcı)...'. Bu fikir C# tarafından da benimsendi. Birçok örneği olduğu gibi Microsoft bu güzelliği gözden kaçırmadı ve .NET Framework yapısı içerisine dahil etti. Nihayetinde oop dillerinin bir vazgeçilmezi haline geldi zamanla.

Garbage Collector(GC)'ın yaptığı iş temel olarak; kullanımı son bulmuş, hiçbir nesne örneği tarafından referans gösterilmeyen, bellek bölgelerini tesipit edip o bölgelerdeki bellek alanını boşaltmaktır. GC sizin yerinize yazılımınızı takip eder ve kullanılmaya bellek bölgelerini sisteme iade eder. Bu durum Java için de asla bellek sızıntısı olmadığı anlamına gelmez tabi ki ama daha öncelerine göre çok da az oranlara indirgenmiş ve bellek sızıntısı hatalarının tedavisi daha kolay hale gelmiştir. Az önce de söylediğim gibi Java pointer kavramını farklı bir alana taşıdı ve herşeye nesne gözü ile bakmaya başladı. GC ise bu nesnelerin aktif kullanımın bellek üzerindeki etkisi ile ilgilenir. Program çalıştığı sürece otomatik olarak bu işlemler gerçekleştirilebileceği gibi aşağıdaki biçimde manuel olarak da tetiklenebilmektedir.

Runtime.getRuntime().gc();  
//veya System.gc();	

Yorumlar (3) -

Özcan Acar
Özcan Acar Turkey
17.05.2012 04:38:49 #

Ayni konudaki yazim:
http://www.kurumsaljava.com/2012/05/17/coplerin-efendisi-garbage-collection/

Yanıtla

admin
admin United Kingdom
20.05.2012 23:34:41 #

Özcan Merhaba,
Yazmak isteyip de yazamadığım, fırsatım olmadığı, türden kıskandırıcı bir yazı.. Eline sağlık...

Cem

Yanıtla

cevap
cevap Turkey
19.08.2013 04:25:28 #

sen yazdın o yaz dı bu yaz dı yazanı rahaysız etmeyın canım  hemen alta yazmısınız bende yazmıs tım  sen nıye yazdın gıbısınden oluyor mu

Yanıtla

Yorum ekle

biuquote
  • Yorum
  • Canlı önizleme
Loading

Hakkımda...

Cem KEFELİ

Electronics and
Telecommunication Eng.
devamı...


Son yapılan yorumlar...

Comment RSS

Yasal bir uyarı...

Disclaimer"Bu web sitesinde görmüş olduğunuz bilgilerin, dokümanların ve diğer materyallerin kullanılmasından doğabilecek hiç bir sorumluluktan site sahibi sorumlu tutulamaz. Web sitesi içerisinde yer alan yazılar, yorumlar, resimler ve diğer tüm içerikler yalnızca sahibinin görüşünü yansıtmakta olup içeriğin sahibi kişilerin çalıştığı kurumları bağlayıcı hiç bir nitelik taşımamaktadır. Yapılan tüm alıntılar mutlaka kaynak gösterilerek verilmeye çalışılmaktadır. Web sitesi içerisinde bulunan ilgili materyaller, ilgili yasal kurumlar tarafından uygun görülmemesi durumda kaldırılacaktır."
General