مقدمة من أكاديمية حسوب
دورة تطوير التطبيقات باستخدام لغة JavaScript
في هذه الدورة ستتعلم لغة جافا سكريبت, استخدام مكتبة React.js, بناء API الموقع بواسطة Node.js, تطوير تطبيق جوال باستخدام React Native, و في نهاية الدورة ستتعلم تطوير تطبيق محادثة شبيه بتطبيق WhatsApp.
دورة تطوير واجهات المستخدم
في هذه الدورة ستتعلم لغة HTML و لغة CSS و لغة JavaScript. من ناحية التطبيق العملي ستتعلم طريقة بناء واجهة متجر إلكتروني مكون من ست صفحات, تحويل خمسة تصاميم PSD إلى صفحات ويب, بناء واجهة مستخدم تشبه موقع يوتيوب, بناء لوحة تحكم إحترافية.
دورة تطوير تطبيقات الجوال باستخدام تقنيات الويب
في هذه الدورة ستتعلم أساسيات منصة كوردوفا و كيف تستخدمها لتطوير تطبيقات متعددة المنصات, بناء تطبيق لموقع Wordpress, تطوير تطبيق قائمة مهام, تطوير تطبيق حالة الطقس, تطوير تطبيق لمطعم باستخدام إطار العمل Ionic 4.
دورة تطوير تطبيقات الويب باستخدام لغة PHP
في هذه الدورة ستتعلم لغة PHP من الصفر, استخدام إطار العمل Laravel بشرح مفصّل و عملي, كيفية تطوير شبكة اجتماعية تشبه Instagram, بناء API لتطبيق جوال وفق أسلوب RESTful, تطوير موقع إعلانات مبوبة, تطوير نظام إدارة محتوى CMS كامل.
دورة تطوير تطبيقات الويب باستخدام لغة Ruby
في هذه الدورة ستتعلم البرمجة بلغة Ruby إنطلاقاً من أبسط المفاهيم وحتى بناء تطبيق حقيقي, إستخدام إطار العمل Ruby on Rails بشرح مفصّل و عملي, بناء تطبيق حقيقي عبارة عن شبكة اجتماعية تشبه تويتر, تطوير مجتمع الكتروني يشبه حسوب I/O.
دورة علوم الحاسوب
هذه الدورة معدة لتكون مدخل لعلوم الحاسوب و لغات البرمجة حيث ستتعرف فيها على أنظمة التشغيل و ستتعمق في نظام لينكس و في كيفية التعامل معه من خلال موجه الأوامر, بالإضافة إلى قواعد البيانات و أساسيات الشبكات و الخوادم و مبادئ الحماية والأمان في الويب.

أقسام الذاكرة في لغة جافا

عند تشغيل برنامج مكتوب بلغة جافا تقوم آلة جافا الإفتراضية (JVM) بحجز مساحة من الذاكرة العشوائية لاستهلاكها, و تقسم هذه المساحة إلى عدة أقسام يتم تخزين في كل منها بيانات معينة و لأهداف مختلفة, و لكل منها مساحة محددة تقبل الزيادة, و تقوم آلة جافا الإفتراضية بإدارة بعض الأقسام و تنظفّهم عند الحاجة لتخزين بيانات جديدة, و سنقوم بشرح بعضهم في هذا المقال.

 

المساحة Heap

تقوم هذه المساحة بتخزين جميع الكائنات التي يتم إنشاؤها في البرنامج بغض النظر عن كيف و أين تم إنشاؤها, و عندما تمتلئ هذه المساحة تقوم آلة جافا الافتراضية بتحفيز جامع القمامة لتنظيف الكائنات التي لم يعد البرنامج بحاجتها حتى يستطيع البرنامج تخزين كائنات جديدة, و عندما لا يجد جامع القمامة ما يمكن إزالته سيحاول توسيع مساحة الـ Heap, وبما أن للـ Heap مساحة كُبرى لا يمكنه تجاوزها ستطلق آلة جافا الافتراضية حينها الخطأ OutOfMemoryError.

عند تشغيل الـ JRE لتقوم بتشغيل برنامج مكتوب بلغة جافا يمكننا تحديد المساحة الأولية التي سيحتلها الـ Heap مباشرة عند تشغيل البرنامج بكتابة المعامل Xms يليه المساحة و ذلك عندما يحتاج البرنامج إلى استهلاك مساحة كبيرة من الذاكرة العشوائية. الفائدة من هذه العملية هي تجاوز عمليات تشغيل جامع القمامة قبل توسيع الـ Heap و التي غالباً ما ستفشل في إيجاد مساحة في حال كان البرنامج يحتاج بالفعل لهكذا مساحة. يمكن أيضاً تحديد مساحة كُبرى لا يمكن للبرنامج تجاوزها بكتابة المعامل Xmx يليه المساحة مع الإشارة إلى أنه عندما لا تقوم بتحديد مساحة كبرى فسيتم تحديدها بناء على نظام التشغيل و مساحة الذاكرة العشوائية المتوفرة و كون النظام 32x أو 64x.

مثال لتشغيل برنامج بمساحة أولية قدرها 256MB ومساحة كبرى قدرها 1GB:

java -jar -Xms256m -Xmx1g MySoftware.jar

 

المساحة Stack

يتم تنفيذ كود جافا دائما داخل Threads, و تقوم آلة جافا الافتراضية بتشغيل Thread واحد أو أكثر أثناء عمل البرنامج.

عند تشغيل البرنامج تقوم آلة جافا الافتراضية بداية بتشغيل أول Thread و المسمى Main Thread و يحدث ذلك بالضبط حين تستدعي الدالة الرئيسية في برنامجنا و التي هي الدالة main().

كل Thread يتم إنشاؤه يتم تخصيص مساحة له تسمى المكدس (Stack) و فيها يتم حفظ البيانات الخاصة بكل دالة نقوم باستدعائها بداخله, و لا يتم مشاركة هذه البيانات بين الـ Threads الآخرين أو حتى بين الدوال الموجودة في نفس المكدس.

لفهم كيف يرى الـ Thread الدوال تخيل معي كيف سينفذ الكود التالي:

public class Test{
    public static void main(String[] args){
        int x = 5;
        Test test = new Test();
        method();
        System.out.println(x);
    }


    public void method(){
        int y = 10;
        System.out.println(y);
    }
}

بداية سيقوم الـ Main Thread بتنفيذ الدالة main() و سيقوم بحجز المساحة التي تحتاجها داخل مساحة المكدس.
بعد أن يبدأ بتنفيذ الكود الموجود داخل الدالة main() سيصل لسطر يتم فيه استدعاء الدالة method(), عندها سيقوم الـ Thread بحجز المساحة التي تحتاجها الدالة method() في المكدس و عند انتهاء تنفيذها سيتم مسح البيانات الخاصة بهذه الدالة من مساحة المكدس و ينتقل التنفيذ إلى الدالة main() لإكمال تنفيذ الأوامر الموجودة فيها. و بعد انتهاء الدالة main() سيتم إزالة المساحة التي استهلكتها من مساحة المكدس.

 

معلومة تقنية

الطريقة التي يتم فيها حجز المساحة للدوال في هياكل البيانات تسمى بالمكدس (Stack), فالمكدس يقوم بتخزين البيانات بطريقة LIFO التي تعني أنّ آخر من يدخل هو أول من يخرج (Last In First Out), و هذا ما حدث عندما تم تنفيذ الكود السابق فقد دخلت الدالة main()للمكدس ثم دخلت method() و خرجت method() ثم خرجت الدالة main().

 

ما الذي يتم تخزينه في مساحة المكدس بالضبط؟

عند تعريف و إسناد القيم داخل الدالة للمتغيرات المحلية (Local Variables) التي يمكنها تخزين قيم بدائية (Primitive Data Types) سيتم تخزين قيمة هذا المتغير في مساحة المكدس مثل المتغيرين x و y اللذين قمنا بتعريفهما في المثال السابق.

عند إنشاء كائن كما فعلنا في المثال السابق في الدالة main() سيتم حفظ ذلك الكائن في الـ Heap, و سيتم تخزين مرجع لذلك الكائن داخل المتغير test, و سيُحفظ المرجع فقط في مساحة المكدس الخاصة بالدالة main().

عندما نقوم باستدعاء مئات الدوال في بعض الحالات (مثلاً في حالة استدعاء الدالة لنفسها Recursion) قد تمتلئ مساحة المكدس و ستطلق آلة جافا الافتراضية حينها الخطأ StackOverFlowError.

لتحديد مساحة المكدس يتم كتابة المعامل Xss يليها المساحة.

مثال لتشغيل برنامج بمساحة مكدس قدرها 1MB:

java -jar -Xss1m MySoftware.jar

 

المساحة Metaspace

هي مساحة في الذاكرة يتم تخزين الحقول الثابتة (التي نوعها static) بالإضافة للبيانات عن الكلاسات (classes) التي يتم تحميلها و الدوال الخاصة بهم.

في الإصدار 8 من جافا, ظهر هذا القسم من الذاكرة ليستبدل القسم القديم Permanent Generation المحدود الذاكرة و الذي يعرف باختصار PermGen الذي كان يتسبب بالخطأ OutOfMemoryError عندما يمتلئ في البرامج التي تحتاج لتحميل الكثير من الكلاسات.

Metaspace قابل للتوسعة بالإضافة إلى أن جامع القمامة أصبح يستطيع تأدية عمله بإزالة الكلاسات غير المستخدمة من الذاكرة بشكل أفضل.

نبّهني عن
guest
2 تعليقات
الآراء المضمنة
شاهد جميع التعليقات
نوف محمد
نوف محمد
10 شهور سابقاً

احتاج اعرف مصادر ومراجع هذي المعلومات لطفا؟

جميع الحقوق محفوظة للموقع   ٢٠٢٠ - ٢٠١٤ ©
DMCA.com Protection Status

محتوى الموقع يخضع لرخصة (CC BY-NC-ND 4.0) التي لا تسمح باستخدام الشروحات لأغراض تجارية, إجراء تعديل عليها و نشرها في موقع آخر, وضع الشروحات في تطبيق أو في كتاب إلا في حال أخذ موافقة صريحة من إدارة الموقع.

© 2020 Harmash. All Content is licensed under CC BY-NC-ND 4.0 unless mentioned otherwise.