freeCodeCamp/guide/arabic/computer-science/garbage-collection/index.md

46 lines
6.4 KiB
Markdown
Raw Normal View History

---
title: Garbage Collection
localeTitle: جمع القمامة
---
## جمع القمامة
#### ما هو جمع القمامة؟
بشكل عام ، فإن مصطلح "جمع القمامة" (GC) ليس سوى تجميع أو استعادة الذاكرة التي تم تخصيصها للكائنات ، والتي لا تستخدم في الوقت الحالي في أي جزء من برنامجنا. وصف موجز على النحو التالي.
جمع البيانات المهملة هي العملية التي تحاول البرامج من خلالها تحرير مساحة الذاكرة التي لم تعد مستخدمة من قبل الكائنات ، ومن هذا القبيل. يتم تنفيذ جمع القمامة بشكل مختلف لكل لغة. تحتوي معظم لغات البرمجة عالية المستوى على نوع من تجميع البيانات المهملة. قد تضيف لغات البرمجة ذات المستوى المنخفض المجموعة المهملة عبر المكتبات.
كما ذكر أعلاه ، فإن كل لغة برمجة لها طريقتها الخاصة في GC. في برمجة C ، يحتاج المطورون إلى رعاية تخصيص الذاكرة وإلغاء تخصيصها باستخدام وظائف malloc () و dealloc (). ولكن في حالة C # للمطورين لا تحتاج إلى رعاية GC ولا ينصح بها.
\#### كيف يحدث تخصيص الذاكرة؟ في C # ، يحدث تخصيص الذاكرة للكائنات في كومة تمت إدارتها. الذي يعتني CLR (وقت تشغيل اللغة العامة). يتم تخصيص الذاكرة من أجل كومة الذاكرة المؤقتة من خلال win32 في نظام التشغيل كما هو الحال في C. ولكن ، يتم وضع C في الذاكرة في أي وقت يناسب المساحة الحرة حجم الكائن. و ، تعيين الذاكرة هو woks استناداً إلى مفاهيم Linkedlist. في C # ، يتم تخصيص الذاكرة كومة الذاكرة المؤقتة بطريقة خطية. مثل واحد تلو الآخر.
متى يتم إنشاء كائن جديد. يتم تخصيص ذاكرة في كومة الذاكرة المؤقتة ثم نقل المؤشر إلى عنوان الذاكرة التالي. تخصيص الذاكرة في C # هو أسرع من C. منذ ، في C تحتاج الذاكرة للبحث والتخصيص للكائن. لذلك سوف يستغرق وقتًا أعلى قليلاً من C #.
\#### Generations في C # GC؟ في برمجة .net ، تحتوي كومة الذاكرة المؤقتة على ثلاثة أجيال يطلق عليها الجيل 0 ، 1 ، 2. يتم ملء الجيل الأول أولاً عند إنشاء كائن جديد. جامع القمامة تشغيل عندما تحصل على شغل الجيل 0. يتم إنشاء الكائنات المنشأة حديثًا في الجيل 0. أثناء أداء مجموعة البيانات المهملة يتم إتلاف كافة الكائنات غير المرغوب فيها ، ويتم تحرير الذاكرة وضغطها. يهتم GC بالإشارة إلى مؤشرات الذاكرة المحررة بمجرد حدوث GC.
الأجيال 1 و 2 لديها الكائن الذي لديه حياة أطول. لن يحدث GC على الأجيال 1 و 2 حتى يكون لدى الأجيال 0 ذاكرة كافية لتخصيص.
من غير المستحسن لاستدعاء GC بشكل برمجي. من الجيد أن تدع الأمر يحدث من تلقاء نفسه. GC الحصول على مكالمة عندما يتم ملء الجيل 0. GC لن يؤثر على أداء البرنامج الخاص بك.
جمع البيانات المهملة هي العملية التي تحاول البرامج من خلالها تحرير مساحة ذاكرة لم تعد مستخدمة من قبل المتغيرات ، والكائنات ، ومثلها. يتم تنفيذ جمع القمامة بشكل مختلف لكل لغة. تحتوي معظم لغات البرمجة عالية المستوى على نوع من تجميع البيانات المهملة المضمنة. قد تضيف لغات البرمجة منخفضة المستوى مجموعة البيانات المهملة عبر المكتبات.
جمع القمامة هو أداة توفر الوقت للمبرمج ، على سبيل المثال أنه يستبدل الحاجة لوظائف مثل malloc () و free () التي توجد في C. ويمكن أن يساعد أيضًا في منع تسرب الذاكرة.
الجانب السلبي لجمع القمامة هو أنه يؤثر سلبًا على الأداء. يجب أن يعمل البرنامج بانتظام من خلال البرنامج ، وفحص مراجع الكائنات وتنظيف الذاكرة - وهذا يأخذ الموارد ويحتاج في كثير من الأحيان إلى توقف البرنامج.
إذا كان الكائن لا يحتوي على مراجع (لم يعد قابلاً للوصول) ، فهو مؤهل لجمع البيانات المهملة. على سبيل المثال ، في رمز Java الموجود أدناه ، يحتوي كائن Thing الذي تمت الإشارة إليه أصلاً بواسطة 'thing1' على مرجع واحد ومرجع فقط إلى كائن آخر على الكومة - ثم يتعذر الوصول إليه وسيتوفر ذاكرة غير مخصصة من قبل أداة تجميع مجمعي البيانات المهملة.
`class Useless {
public static void main (String[] args) {
Thing thing1 = new Thing();
Thing thing2 = new Thing();
thing2 = thing1; // direct thing2's reference towards thing1
// no references access thing2
} }
`
أحد الأمثلة على جمع البيانات المهملة هو ARC ، باختصار لحساب المراجع الأوتوماتيكي. هذا يستخدم في سويفت ، على سبيل المثال. ARC يتلخص لتتبع المراجع إلى جميع الكائنات التي يتم إنشاؤها. إذا انخفض مقدار المراجع إلى 0 ، فسيتم وضع علامة على الكائن لإلغاء تخصيصه.
#### معلومات اكثر:
* https://docs.microsoft.com/en-us/dotnet/standard/garbage-collection/fundamentals - لمعرفة المزيد عن مجموعة البيانات المهملة