Garbage collection (computer science)

[thumb|400x400px|Stop-and-copy garbage collection in a [:en:Lisp_(programming_language)|Lisp architecture: Memory is divided into *working* and *free* memory; new objects (*cons* pairs) are allocated in the former. When it is full (depicted), garbage collection is performed: All data structures still in use are located by pointer tracing and copied into consecutive locations in free memory...]]
thumb|400x400px|... After that, the working memory contents is discarded in favor of the compressed copy, and the role of *working* and *free* memory are exchanged (depicted).
ကွန်ပျူတာသိပ္ပံ တွင် **အမှိုက်သိမ်းခြင်း** ( **GC** ) သည်အလိုအလျောက် မှတ်ဉာဏ်စီမံခန့်ခွဲမှု ပုံစံဖြစ်သည်။ *အမှိုက်သိမ်းသူ* သို့မဟုတ် သိမ်းဆည်းသူသည် ပရိုဂရမ် ကအသုံးမပြုတော့သော အရာဝတ္ထုများကို ဖယ်ရှားခြင်းဖြင့် မှတ်ဉာဏ်ကိုပြန်လည်ရယူရန် ကြိုးစားသည်။ အမှိုက်သိမ်းခြင်းကို အမေရိကန်ကွန်ပျူတာသိပ္ပံပညာရှင် ဂျွန်မက်ကာသီ က ၁၉၅၉ ခုနှစ်ဝန်းကျင်တွင် Lisp ပရိုဂရမ်းမင်းရှိ (ပရိုဂရမ်မာမှ တာဝန်ယူလုပ်ဆောင်ပေးရန်လိုအပ်သည့်) မှတ်ဉာဏ်စီမံခန့်ခွဲမှုစနစ်ကို လွယ်ကူစေရန်တီထွင်ခဲ့သည်။ 

GC စနစ်သည် မန်မိုရီမှ မည်သည့်အရာဝတ္ထုများကို ဖယ်ရှားရမည်၊ မည်သည့်အချိန်တွင်ထိုသို့လုပ်ဆောင်ရမည်ကို ပရိုဂရမ်မာများကိုယ်တိုင်စီမံနေရခြင်းမှ သက်သာစေသည်။ အမှိုက်သိမ်းဆည်းခြင်းနှင့် ဆင်တူသော နည်းစနစ်များမှ stack allocation, region inference, memory ownership, နှင့် combinations of multiple techniques တို့ဖြစ်သည်။ 

GC စနစ်သည် မန်မိုရီ မဟုတ်သော အခြားအရင်းအမြစ်များဖြစ်သော network sockets, database handles, user interface windows, file နှင့် device descriptor များနှင့် မသက်ဆိုင်ပါ။ ထိုကဲ့သို့သောအရင်းအမြစ်များကိုစီမံရန်အသုံးပြုသော နည်းလမ်းများ (အထူးသဖြင့် ဖျက်ဆီးသူများ)တွင်မူ မန်မိုရီကိုစီမံခန့်ခွဲသည့် စနစ်များပါဝင်ပြီး အမှိုက်သိမ်းခြင်းကို သီးခြားလုပ်ဆောင်ရန် မလိုအပ်သည့် အခြေအနေများ ရှိနိင်သည်။ အချို့သော GC စနစ်များသည် ထိုကဲ့သို့သော အရင်းအမြစ်များကို မန်မိုရီ၏အစိတ်အပိုင်းတစ်ခုနှင့် ချိတ်ဆက်ရန်ခွင့်ပြုသဖြင့် အမှိုက်သိမ်းသောအခါ ထိုအရင်းအမြစ်များကို ပြန်လည်ရယူရန်အတွက်ပါ လုပ်ဆောင်ရသည်။

## နိယာမများ 
GC စနစ်၏အခြေခံစည်းမျဉ်းများမှာ နောင်တွင်ပြန်လည်အသုံးပြုရန်မလိုအပ်သည့် ပရိုဂရမ်များမှ အရာဝတ္ထုများကို ရှာဖွေရန်နှင့် ထိုအရာဝတ္ထုများမှ အသုံးပြုထားသော အရင်းအမြစ်များကို ပြန်လည်ရယူရန်ဖြစ်သည်။

ပရိုဂရမ်းမင်းဘာသာစကား အများစုသည် GC စနစ် လိုအပ်ပြီး ထိုစနစ်တပါတည်းပါဝင်သော ပရိုဂရမ်းမင်းဘာသာစကား  များကို GC စနစ်ပါဝင်သော ပရိုဂရမ်းမင်းဘာသာစကား များဟုခေါ်ဆိုသည်။ အခြားသော ပရိုဂရမ်းမင်းဘာသာစကားများမှာ ပရိုဂရမ်မာမှတာဝန်ယူလုပ်ဆောင်ပေးရသည့် GCစနစ်နှင့် ကိုက်ညီအောင် ဒီဇိုင်းဆွဲထားသည်။ သို့သော် GCစနစ်တပါတည်းပါဝင်သော အကောင်အထည်ဖော်မှုများ(implementations) လည်းရရှိနိုင်သည် (ဥပမာ၊ C နှင့် C ++ ) ။ Ada, Modula-3 နှင့် C ++ / CLI တို့ကဲ့သို့သော ဘာသာစကားများသည် မန်မိုရီတွင် ၂နေရာခွဲကာ သိမ်းဆည်းခြင်းဖြင့် တပါတည်းပါဝင်သော GCစနစ် နှင့် ပရိုဂရမ်မာမှတာဝန်ယူလုပ်ဆောင်ပေးရသည့် မန်မိုရီစီမံခန့်ခွဲမှုစနစ် ၂ မျိုးလုံးကို application တခုထဲတွင် အသုံးပြုနိုင်သည်။   D ကဲ့သို့သော ပရိုဂရမ်းမင်းဘာသာစကားများမှာမူ GCစနစ်တပါတည်းပါဝင်သော်လည်း ပရိုဂရမ်မာမှ အရာဝတ္ထုများကို တိုက်ရိုက်ဖယ်ရှားနိုင်ခြင်း၊ လုပ်ဆောင်မှု ပိုမိုမြန်ဆန်စေရန် တပါတည်းပါဝင်သော GCစနစ်အား ပိတ်ပင်ခြင်းတို့ကို လုပ်ဆောင်ခွင့်ပြုထားသည်။

### အားသာချက်များ 
GCစနစ်သည် မန်မိုရီနေရာရှင်းလင်းခြားကို ပရိုဂရမ်မာကိုယ်တိုင်စီမံနေရခြင်းမှ သက်သာစေသည်။ ရလဒ်အနေနှင့်အချို့သော bug  များပါ ကင်းစင်(သို့မဟုတ်)လျော့နည်းသွားစေသည်။

* *Dangling pointer bugs  မန်မိုရီ၏အစိတ်အပိုင်းတခုသည် ၎င်းကို ညွှန်းထားသည့်* pointers ရှိနေဆဲဖြစ်ပြီး ၎င်း pointers များထဲမှ တခု(သို့မဟုတ် တခုထက်ပိုသော pointer များ)သည် အသုံးပြုနေဆဲ အခြေအနေတွင် ၎င်းမန်မိုရီနေရာမှအရာဝတ္ထုကို ဖယ်ရှားလိုက်မိခြင်းဖြစ်သည်။ ၎င်းမန်မိုရီနေရာတွင် အခြားအရာဝတ္တုတခုကို နေရာပေးမိသောအခါ ခန့်မှန်းမရနိုင်သော ရလဒ်များ ဖြစ်လာနိုင်သည်။
* *Double free bugs(နှစ်ခါဖယ်ရှားမိခြင်း) မန်မိုရီ၏အစိတ်အပိုင်းတခုသည် ဖယ်ရှားထားပြီးဖြစ်၍ အခြားအရာဝတ္ထုတခုသည် ထိုနေရာကို အသုံးပြုနေသည့်အချိန်တွင် (မရှင်းရသေးဘူးဟုယူဆကာ) ထပ်မံ၍ဖယ်ရှားမိခြင်းဖြစ်သည်။* 
* မန်မိုရီကုန်ဆုံးသွားခြင်း ပရိုဂရမ်တခုသည် အသုံးပြုရန်မလိုအပ်တော့သော အရာဝတ္ထုများကို မန်မိုရီမှ မဖယ်ရှားမိသဖြင့် ထပ်မံသိမ်းဆည်းရန် မန်မိုရီနေရာမကျန်တော့ခြင်းဖြစ်သည်။
* အတည် ဒေတာဖွဲ့စည်းပုံ များအတွက် ထိရောက်သောအကောင်အထည်ဖော်မှုများ ရရှိနိုင်ခြင်း

### အားနည်းချက်များ 
GCစနစ်တွင်  အရင်းအမြစ်များ ပိုမိုသုံးစွဲခြင်း၊ စွမ်းဆောင်ရည်အားထိခိုက်ခြင်း၊ ပရိုဂရမ်အလုပ်လုပ်ဆောင်ရာတွင် ရပ်တန့်စေခြင်း၊ ပရိုဂရမ်မာကိုယ်တိုင်လုပ်ဆောင်ရန်လိုသည့် အရင်းအမြစ်စီမံခန့်ခွဲမှုများနှင့် သဟဇာတမဖြစ်ခြင်း စသည့်အားနည်းချက်များရှိသည်။

## ကိုးကား 
ကဏ္ဍ:ကွန်ပျူတာ