JavaRush /مدونة جافا /Random-AR /استراحة القهوة رقم 60. كيف يعمل جمع البيانات المهملة في J...

استراحة القهوة رقم 60. كيف يعمل جمع البيانات المهملة في Java (JVM). 15 سؤال مهم عن الربيع في مقابلة فنية

نشرت في المجموعة

كيف يعمل جمع البيانات المهملة في Java (JVM)

المصدر: ديزون

عملية جمع البيانات المهملة في جافا

تقوم مجموعة Java المهملة بتخصيص الذاكرة وتحريرها تلقائيًا، لذلك لا يضطر المطورون إلى كتابة برنامج منفصل لإدارة الذاكرة، وهي إحدى الفوائد الرئيسية للبرمجة في Java. في كل مرة يتم فيها تشغيل برنامج Java على JVM، يتم إنشاء كائنات على الكومة وتمثل جزءًا من الذاكرة المخصصة للبرنامج. مع مرور الوقت، لن تكون هناك حاجة لبعض العناصر. يقوم جامع البيانات المهملة بالبحث عن هذه الكائنات غير المستخدمة وإزالتها لتحرير الذاكرة. استراحة القهوة رقم 61.  كيف يعمل جمع البيانات المهملة في Java (JVM).  15 سؤال مهم عن الربيع في المقابلة الفنية - 1سيقوم جامع البيانات المهملة، بعد تقييم كومة الذاكرة، بتحديد الكائنات المستخدمة والكائنات غير المستخدمة، وإزالة الكائنات غير المستخدمة. الكائن المستخدم أو المشار إليه يعني أن جزءًا ما من برنامجك لا يزال يحتفظ بمؤشر لذلك الكائن. إذا لم يعد الكائن قيد الاستخدام أو لم تعد تتم الإشارة إليه، فلن تتم الإشارة إليه بعد الآن بواسطة أي جزء من البرنامج. وبالتالي، يمكن تحرير الذاكرة المستخدمة من قبل كائن غير مرجعي عن طريق إجراء عملية جمع البيانات المهملة. استراحة القهوة رقم 61.  كيف يعمل جمع البيانات المهملة في Java (JVM).  15 سؤال مهم عن الربيع في المقابلة الفنية - 2يمكن وصف تحرير الذاكرة من خلال ثلاث عمليات رئيسية:
  1. العلامات.
  2. إزالة عادية.
  3. إزالة مع الضغط.
وضع العلامات هو عملية تحديد أجزاء الذاكرة التي يستخدمها جامع البيانات المهملة والتي لا يستخدمها. وضع العلامات عادة ما يكون الخطوة الأولى. الحذف العادي هو عملية حذف الكائنات التي لم يتم الرجوع إليها، وترك الكائنات والمؤشرات المشار إليها في المساحة الحرة. حذف الضغط - بالإضافة إلى حذف الكائنات غير المرجعية، فإنه يقوم بضغط الكائنات المرجعية المتبقية، ونقل الكائنات معًا لجعل تخصيص الذاكرة الجديدة أسهل وأسرع بكثير.

ذاكرة كومة JVM

استراحة القهوة رقم 61.  كيف يعمل جمع البيانات المهملة في Java (JVM).  15 سؤال مهم عن الربيع في المقابلة الفنية - 3

جيل الشباب

تبدأ الكائنات التي تم إنشاؤها حديثًا في جيل الشباب. ويطلق عليها أيضًا اسم الحضانة لأن الأشياء الجديدة تبدأ في العيش هنا. ينقسم Young Generation إلى Eden Space، حيث تبدأ جميع الكائنات الجديدة، ومساحتين للناجين، حيث يتم نقل الكائنات من Eden بعد بقائها في دورة واحدة لجمع القمامة. إنها تتسبب في إعادة تجميع البيانات المهملة عندما يتم جمع الكائنات بواسطة أداة تجميع البيانات المهملة من Young Generation. Eden Space يتم إنشاء جميع الكائنات الجديدة لأول مرة في Eden Space. سيتم إطلاق مجموعة البيانات المهملة الصغيرة عندما تصل إلى الحد الذي يحدده JVM. تم نقل الكائنات المذكورة من مساحة عدن إلى مساحة الحفظ الأولى ("عدن" و"من" -> "إلى"). تتم إزالة الكائنات غير المرجعية عند مسح Eden Space. الناجي 0 (S0) والناجي 1 (S1) يبدأ حقلا الناجي (من وإلى) فارغين. عند حدوث تجميع البيانات المهملة مرة أخرى، يتم نقل كافة الكائنات المشار إليها إلى المساحة المتبقية. عند الانتهاء من جمع القمامة، يتم تبديل أماكن (أسماء) الناجي "من" و"إلى". إذا كان S1 أثناء عملية تجميع البيانات المهملة السابقة في الدور "إلى"، فإن S1 الآن ممتلئ ويصبح "من". وبناءً على ذلك، إذا كان S0 فارغًا، فسيصبح "إلى".

الجيل القديم

بعد جمع القمامة البسيطة، عندما تصل الكائنات القديمة إلى حد عمر معين (يتم تعيين العتبة الافتراضية لـ JVMs الحديثة على 15 دورة لجمع القمامة)، فإنها تنتقل، جنبًا إلى جنب مع الكائنات طويلة العمر، من الجيل الجديد إلى الجيل القديم. مع استمرار ظهور جامعي البيانات المهملة الصغار، تستمر الكائنات في الانتقال إلى مساحة الجيل القديم، وستبدأ في الامتلاء وستحدث مجموعة كبيرة من البيانات المهملة. يحدث جمع البيانات المهملة الأساسية عندما يتم جمع الكائنات بواسطة أداة تجميع البيانات المهملة من الجيل القديم. استراحة القهوة رقم 61.  كيف يعمل جمع البيانات المهملة في Java (JVM).  15 سؤال مهم عن الربيع في المقابلة الفنية - 4

الجيل الدائم

يتم تخزين البيانات التعريفية مثل الفئات والأساليب في الإنشاء الدائم. يمكن إزالة الفئات التي لم تعد مستخدمة منه بواسطة جامع البيانات المهملة. أثناء عملية جمع البيانات المهملة الكاملة، يتم جمع الكائنات غير المستخدمة من جميع الأجيال.استراحة القهوة رقم 61.  كيف يعمل جمع البيانات المهملة في Java (JVM).  15 سؤال مهم عن الربيع في المقابلة الفنية - 5

أنواع جمع القمامة

غالبًا ما تسمى مجموعات البيانات المهملة التي تقوم بتنظيف أجزاء مختلفة داخل الكومة بمجموعات البيانات المهملة الثانوية والرئيسية والكاملة. ولكن بما أن المصطلحات الصغرى والكبرى والكاملة تستخدم على نطاق واسع دون تعريف مناسب، فسوف ننظر في شرح كل هذه الأنواع من جمع البيانات المهملة.

جمع القمامة البسيطة

يُطلق على مجموعة القمامة من مساحة Young Generation اسم Minor Garbage Collection. يتم تشغيل هذا النوع من البناء دائمًا عندما يتعذر على JVM تخصيص مساحة لكائن جديد، أي عندما تكون مساحة Eden ممتلئة. وبالتالي، كلما ارتفع معدل الاختيار، كلما حدث جمع صغير للقمامة في كثير من الأحيان.

جمع القمامة الكبرى

تعمل مجموعة القمامة الرئيسية على تنظيف المساحة القديمة (المساحة القديمة). نظرًا لأن الجيل القديم أكبر حجمًا، فإن التجمع يحدث بشكل أقل تكرارًا من جيل الشباب. عندما تختفي الكائنات من الجيل القديم، نقول أنه قد حدثت "مجموعة كبيرة من البيانات المهملة". سيحاول جامع الجيل القديم التنبؤ بالوقت الذي يحتاج فيه إلى البدء في التجميع لتجنب فشل الترقية من جيل الشباب. يقوم المجمعون بمراقبة حد التعبئة الخاص بالجيل القديم ويبدأون في التجميع عند تجاوز هذا الحد. إذا لم يكن هذا الحد كافيًا لتلبية متطلبات الترقية، فسيتم تشغيل "Full Garbage Collection".

جمع القمامة الكامل

تقوم مجموعة القمامة الكاملة بتنظيف المجموعة بأكملها، سواء المساحات الصغيرة أو القديمة. يخلط العديد من الأشخاص بين Major (الجيل القديم فقط) وFull GC (Young + OLD (Heap)). تتضمن مجموعة القمامة الكاملة الترويج لجميع الكائنات الحية من الجيل الصغير إلى الجيل القديم بعد تجميع وضغط الجيل القديم. ستكون عملية جمع القمامة الكاملة بمثابة توقف لـ Stop-the-World. فهو يضمن عدم تخصيص كائنات جديدة وأن الكائنات لن تصبح غير متاحة أثناء تشغيل المجمع.

15 سؤال مهم عن الربيع في مقابلة فنية

المصدر: Dev.to Spring Framework هو إطار عمل عالمي لمنصة Java. يمكن استخدام وظائفه الأساسية بواسطة أي تطبيق Java، وهناك امتدادات لإنشاء تطبيقات الويب المستندة إلى Java EE. فيما يلي قائمة بأسئلة وإجابات المقابلة المتعلقة ببرمجة الربيع. نأمل أن يساعدوك في الاستعداد للمقابلة الفنية في عام 2021.استراحة القهوة رقم 61.  كيف يعمل جمع البيانات المهملة في Java (JVM).  15 سؤال مهم عن الربيع في المقابلة الفنية - 6

1. ما هو الربيع؟

الإجابة: Spring هو إطار عمل مفتوح المصدر لتطوير تطبيقات Java. يمكن استخدام الميزات الأساسية لـ Spring Framework لتطوير أي تطبيق Java، كما تتوفر الامتدادات أيضًا لإنشاء تطبيقات الويب استنادًا إلى منصة Java EE. يهدف إطار عمل Spring إلى تسهيل استخدام J2EE في التطوير وتحسين ممارسات البرمجة من خلال دمج نموذج يستند إلى POJO (كائن Java القديم العادي).

2. ما هو النطاق الافتراضي للفاصوليا في إطار عمل الربيع؟

الإجابة: النطاق الافتراضي للفاصوليا هو Singleton (نمط التصميم).

3. ما هي أسلاك الفول؟

الإجابة: توصيلات Bean هي عملية إنشاء ارتباطات بين مكونات التطبيق (الفاصوليا) في حاوية Spring.

4. ما هو أمان الربيع؟

الإجابة: Spring Security عبارة عن وحدة منفصلة لإطار عمل Spring تركز على توفير طرق المصادقة والترخيص لتطبيقات Java. كما أنه يعمل على إصلاح الثغرات الأمنية الأكثر شيوعًا مثل هجمات CSRF. لاستخدام Spring Security في تطبيقات الويب، يمكنك البدء بتعليق توضيحي بسيط: @EnableWebSecurity.

5. ما الذي يتضمنه تعريف الفول؟

الإجابة: يحتوي تعريف الفول على معلومات تسمى بيانات تعريف التكوين التي تحتاج الحاوية إلى معرفة ما يلي:
  • كيفية صنع الفول؛
  • تفاصيل دورة حياة الفول؛
  • تبعيات الفول.

6. ما هو الحذاء الربيعي؟

الإجابة: Spring Boot هو مشروع يوفر مجموعة من إطارات العمل التي تم تكوينها مسبقًا لتقليل التكوين المعياري بحيث يمكنك تشغيل تطبيق Spring بأقل قدر من التعليمات البرمجية.

7. ما هو DispatcherServlet وما هو استخدامه؟

الإجابة: DispatcherServlet هو تطبيق لنمط تصميم وحدة التحكم الأمامية الذي يتعامل مع جميع طلبات الويب الواردة إلى تطبيق Spring MVC. يعد نمط وحدة التحكم الأمامية (نمط تصميم تطبيق المؤسسة) نمطًا شائعًا في تطبيقات الويب التي تتمثل مهمتها في أخذ الطلب بالكامل وتوجيهه إلى المكونات المختلفة للتطبيق للمعالجة الفعلية. في Spring، يتم استخدام MVC DispatcherServlet للعثور على وحدة التحكم الصحيحة للتعامل مع الطلب. ويتم ذلك باستخدام تعيين المعالج: على سبيل المثال، التعليق التوضيحي @RequestMapping.

8. هل هناك حاجة إلى Spring-mvc.jar في مسار الفصل أم أنها جزء من Spring-Core؟

الإجابة: Spring-mvc.jar هو جزء من Spring-core، مما يعني أنه إذا كنت تريد استخدام إطار عمل Spring MVC في مشروع Java الخاص بك، فيجب عليك تضمين Spring-mvc.jar في مسار فئة التطبيق الخاص بك. في تطبيق ويب Java، عادةً ما يتم وضع Spring-mvc.jar في المجلد /WEB-INF/lib.

9. ما هي فوائد استخدام الربيع؟

الإجابة: فيما يلي قائمة ببعض فوائد استخدام Spring Framework:
  • خفيف الوزن - الربيع خفيف الوزن نسبيًا عندما يتعلق الأمر بالحجم والشفافية. يبلغ حجم الإصدار الأساسي من Spring Framework حوالي 2 ميجابايت.
  • انقلاب التحكم (IOC) - يتم تحقيق الاقتران السائب في الربيع باستخدام تقنية انقلاب التحكم. توفر الكائنات تبعياتها بدلاً من إنشاء كائنات تابعة أو البحث عنها.
  • موجه نحو الجوانب - يدعم Spring البرمجة الموجهة نحو الجوانب ويضمن التطوير المتسق من خلال فصل منطق أعمال التطبيق عن خدمات النظام.
  • الحاويات - تقوم Spring Container بإنشاء الكائنات وربطها معًا وتكوينها وإدارتها من الإنشاء إلى التخلص منها.
  • MVC Framework - إطار عمل Spring web هو إطار ويب MVC مصمم جيدًا ويوفر بديلاً لأطر الويب مثل Struts أو أطر الويب الأخرى المصممة بشكل مفرط أو الأقل شيوعًا.
  • إدارة المعاملات - يتمتع Spring بواجهة متسقة لإدارة المعاملات يمكنها التوسع في المعاملات المحلية (على سبيل المثال باستخدام قاعدة بيانات واحدة) أو المعاملات العالمية (على سبيل المثال باستخدام JTA).
  • معالجة الاستثناءات - يوفر Spring واجهة برمجة تطبيقات ملائمة لتحويل الاستثناءات الخاصة بالتكنولوجيا (مثل تلك التي يتم طرحها بواسطة JDBC أو Hibernate أو JDO) إلى استثناءات متسقة وغير محددة.

10. ما هي حبوب الربيع؟

الإجابة: تعد فاصوليا الربيع مثيلات للكائنات التي تتم إدارتها بواسطة Spring Container. يتم إنشاؤها وتوصيلها بواسطة إطار العمل ووضعها في "حقيبة العناصر" (الحاوية) حيث يمكنك استردادها لاحقًا. الأسلاك هي ما يشكل حقن التبعية. هذا يعني أنه يمكنك ببساطة أن تقول: "أحتاج إلى هذا الشيء"، وسيتبع إطار العمل قواعد معينة للحصول على هذا الشيء.

11. ما هو الغرض من وحدة الحاوية الأساسية؟

الإجابة: توفر حاوية kernel الوظيفة الأساسية لإطار عمل Spring. المكون الأساسي للحاوية الرئيسية هو BeanFactory، وهو تطبيق لنمط المصنع. يستخدم BeanFactory التحكم في الانقلاب لفصل تبعيات التكوين ومواصفات التطبيق عن رمز التطبيق الفعلي.

12. ما هو سياق التطبيق؟

الإجابة: للوهلة الأولى، سياق التطبيق هو نفس سياق مصنع الفول. يقوم كلا البرنامجين بتحميل تعريفات الفاصوليا، وتجميع الفاصوليا معًا، وتوزيعها عند الطلب. ولكنه يوفر أيضًا:
  • أداة لحل الرسائل النصية، بما في ذلك دعم التدويل.
  • طريقة شائعة لتحميل موارد الملفات.
  • أحداث الفول التي تم تسجيلها كمستمعين.

13. كيفية دمج Java Server Faces (JSF) مع Spring؟

الإجابة: يشترك كل من JSF وSpring في بعض الميزات نفسها، خاصة في مجال خدمات عكس التحكم. من خلال الإعلان عن الفاصوليا المُدارة بواسطة JSF في ملف تكوين faces-config.xml، فإنك تسمح لـ FacesServlet بإنشاء مثيل لهذه الفاصوليا عند بدء التشغيل. تتمتع صفحات JSF الخاصة بك بإمكانية الوصول إلى هذه الحبوب وجميع خصائصها. يمكن دمج JSF وSpring بطريقتين: DelegatingVariableResolver : يأتي Spring مع محلل متغير JSF يسمح لك باستخدام JSF وSpring معًا. يقوم DelegatingVariableResolver أولاً بتفويض البحث عن القيم إلى المترجم الافتراضي لتطبيق JSF الأساسي، ثم إلى "سياق الأعمال" الخاص بـ Spring WebApplicationContext. وهذا يجعل من السهل حقن التبعيات في الحبوب التي يديرها JSF. FacesContextUtils : يعمل VariableResolver المخصص بشكل جيد عند تعيين خصائصه إلى الفاصوليا في faces-config.xml. ولكن إذا كنت بحاجة إلى التقاط حبة فول، فإن فئة FacesContextUtils تجعل الأمر سهلاً. إنه مشابه لـ WebApplicationContextUtils فيما عدا أنه يقبل معلمة FacesContext بدلاً من معلمة ServletContext.
ApplicationContext ctx = FacesContextUtils.getWebApplicationContext (FacesContext.getCurrentInstance ());

14. ما هو إطار عمل Spring MVC؟

الإجابة: يوفر إطار عمل Spring Web MVC بنية تحكم لعرض النموذج ومكونات معدة مسبقًا يمكن استخدامها لتطوير تطبيقات ويب مرنة ومترابطة بشكل غير محكم. يؤدي نمط MVC إلى فصل الجوانب المختلفة للتطبيق (منطق الإدخال ومنطق الأعمال ومنطق واجهة المستخدم) مع السماح بالاقتران غير المحكم بين هذه العناصر.

15. كيف يتم التعامل مع الأحداث في الربيع؟

الإجابة: يتم توفير المعالجة في ApplicationContext من خلال فئة ApplicationEvent وواجهة ApplicationListener . أي أنه إذا قامت إحدى الفاصوليا بتنفيذ ApplicationListener ، ففي كل مرة يتم نشر ApplicationEvent إلى ApplicationContext ، يتم تسجيل تلك الفاصوليا. شكرا للقراءة ونتمنى لك حظا سعيدا في مقابلتك الفنية!
تعليقات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION