من فترة كنت اتناقش مع احد الاصدقاء عن الفرق بين Java و c#
فدخلنا في موضوع garbage collection واخبرني انها في الجافا ممتازة وافضل بكثير من الموجودة في C#
فهل كلامه صحيح ومالفرق في طريقة عملها كليهما
معرفتي حول ال Java Hotspot/GC وسأتحدث قليلاً فيه..
في جافا يستخدم ال GC فكرة Generational Garbage Collector ، وهذه الفكرة تعتمد على نظرية أن اغلب الكائنات التي تنشئها في التطبيق تنتهي بسرعه (تصبح Unreachable objects) وفقط هناك مجموعه قليله من الكائنات تظل موجودة في التطبيق ويكون عمرها اطول Younger Objects فلا تنتهي بسرعه، حتى الذاكرة قسمت لعدة اجزاء The Young Generation و The Old Generation بناء على هذه النظرية (طبعاً هناك تفاصيل كثيرة جداً وراء ذلك).
المهم الذي يميز في ال HotSpot VM أن هناك كثير من الخورازميات التي تستطيع استخدامها واختيارها عندما يعمل برنامجك، الى درجة يمكن أن يكون لكل Generation في الذاكرة خوارزمية GC خاصه فيه بناء على طريقة عمله، مثلاً:
* في الYoung Generation يتم اختيار خوارزمية GC سريعه ولذلك لأن عملية Minor GC تكون متكررة دائماً ولا يهتم كثيراً لكون الخوارزمية تستهلك مساحة هي الأخرى في الذاكرة وذلك لأن Young Generation هي منطقة صغيرة هي الأخرى
طبعاً كلما كبر البرنامج أحتاج الأمر الى دراسة وTuning بشكل أفضل.
الذي أعرفه ال C# GC أنه أقل مرونة من ناحية تخصيص خورازميات ال GC قبل تشغيل البرنامج مثل الجافا.
عادة لا أحبذ مواضيع ما الفرق، لأن هذه المواضيع هي الأصعب في الاجابة الصحيحة، ولن يفهمها اي شخص حتى بعد الاجابة لأنها تحتاج خبرة لأن الفروق دائماً في التفاصيل devil in details، لذلك لا فائدة كبيرة منها الا للInternal Developers الذين يعملوا على GC Algorithms، الأفضل للمبرمجين ان يتناقشوا حول "كيف يعمل" وليس "ما الفرق" لأن الأخير غالباً لا يوجد من يستطيع ان يجيب عليه.
التعليقات