لم أقرأ كتابًا عن جافا لفترة طويلة. لقد قرأت مؤخرًا لغة برمجة James Gosling الخاصة بـ James Gosling >> وأخذت بعض ملاحظات القراءة. هذا الجزء يدور حول إعادة تدوير القمامة.
1. إعادة تدوير القمامة
يتم إنشاء الكائنات باستخدام جديد ، ولكن لا توجد عملية حذف مقابلة لإعادة تدوير الذاكرة التي يحتلها الكائن. عندما نكممل استخدام كائن ، نحتاج فقط إلى إيقاف الإشارة إلى هذا الكائن:
-> تغيير الإشارة إلى النقطة إلى كائن آخر
-> نقطة الإشارة إلى NULL
-> العودة من الطريقة بحيث لم تعد المتغيرات المحلية للطريقة موجودة
النقاط الرئيسية:
-> عندما لا يمكننا الوصول إلى كائن من أي رمز قابل للتنفيذ ، يمكن إعادة تدوير المساحة التي يستغرقها.
-> إعادة تدوير القمامة تعني أننا لا داعي للقلق أبدًا بشأن تعلق المراجع. يشير مرجع كاذب إلى إشارة إلى مساحة الذاكرة التي تم حذفها. توجد هذه المشكلة في الأنظمة التي يمكن للمبرمجين التحكم فيها بشكل مباشر عند حذف الكائنات.
-> نموذج جامع القمامة: طريقة عداد المرجع (لا يمكن حل المرجع الدائري) ، علامة و SWEEP.
2. ملخص
الانتهاء من الطريقة
-> بعد أن تحدد جامع القمامة أن الكائن أمر غير قابل للوصول وأن مساحة الكائن سيتم إعادة تدويرها ، سيقوم جامع القمامة بتسمية هذه الطريقة.
-> يمكن لهذه الطريقة مسح جميع الموارد غير الذكية المستخدمة من قبل الكائن ، ولا يمكن استدعاؤها إلا مرة واحدة لكل كائن. حتى إذا كان تنفيذ هذه الطريقة يجعل الكائن قابلاً للوصول مرة أخرى ، ثم يصبح غير قابل للوصول على الفور مرة أخرى ، لا يمكن استدعاء الطريقة إلا مرة واحدة.
يمكن استدعاء طريقة النهائيات في أي فترة زمنية محددة ، وقد لا يتم تسميتها أبدًا (تنتهي الجهاز الظاهري Java).
تجاوز طريقة الانتهاء
-> عندما يصبح الكائن القمامة ، من المحتمل أن تصبح الكائنات الأخرى التي يشير إليها أيضًا قمامة. ربما تم إنهاء هذه القمامة قبل استدعاء طريقة الانتهاء التي كتبناها ، لذلك قد تكون في حالة غير متوقعة.
-> الكتابة فوق طريقة الانتهاء هي إضافة طريقة Super.Finlize. من الأفضل إضافتها في الجملة الأخيرة. تأكد من أنه يمكن أيضًا إنهاء بعض المحتوى المعلن في فئة الفئة الفائقة.
ثالثا. الفئات والأساليب ذات الصلة للتفاعل مع جامعي القمامة
الفصل: وقت التشغيل. getRuntime () ، النظام
الطريقة: GC () ، الترن () ، freememory () ، TotalMemory () ، MaxMemory ()
تدعم فئة النظام طرق GC () الثابتة () والترد () ، والتي ستستدعي الطرق المقابلة على كائن وقت التشغيل الحالي.
رابعا. حالة إمكانية الوصول والكائنات المرجعية
لا يمكن جمع الكائن إلا عن القمامة عندما لا يحدده أي مرجع ، ولكن في بعض الأحيان قد نرغب في جمع الكائن كقمامة عندما لا يزال هناك مرجع محدد يشير إلى الكائن.
الغرض الوحيد من كائن مرجعي هو الحفاظ على إشارة إلى كائن آخر يسمى مرجع. عادةً ما نحافظ على الإشارات إلى الكائنات من خلال الحقول أو المتغيرات المحلية ، ولكن الآن يمكننا الحفاظ على المراجع المباشرة للكائنات المرجعية ، والتي تلتف الكائن الذي نحتاجه بالفعل. قد يحدد جامع القمامة ما إذا كانت المرجع المتبقي إلى كائن ما يشار إلى الكائن عبر وجه الكائن المرجعي ، بحيث يمكن أن يقرر ما إذا كان سيتم إعادة تدوير الكائن. ستحدد قوة الكائن المرجعي سلوك جامع القمامة ، والمراجع العادية هي أقوى المراجع.
فئة مرجعية
-> الحزمة: java.lang.ref
-> الطرق النموذجية: get () ، clear () ، enqueue () ، isenqueued ()
قوة الاقتباس وسهولة الوصول
-> الكائنات يمكن الوصول إليها بشدة: مرجع عادي
-> الكائن يمكن الوصول إليه بهدوء: softreference
-> الكائنات يمكن الوصول إليها بشكل ضعيف: ضعيفة
-> الكائنات يمكن الوصول إليها تقريبًا (قابلة للوصول إلى الوهمية):
-> الكائنات غير قابلة للوصول: لا توجد روابط مرجعية بمجرد أن يصبح الكائن يمكن الوصول إليه بشكل ضعيف (أو ضعيف العمود) ، يمكن إنهاءه. إذا كان الكائن لا يمكن الوصول إليه بعد الإنهاء ، فيمكن إعادة تدويره.
تؤدي مرحلة الوصول إلى الكائن إلى تشغيل جامع القمامة لأداء السلوك المناسب على أنواع الكائنات المرجعية ذات الصلة:
-> قد يُسمح بإعادة تدوير الكائنات الناعمة التي يمكن الوصول إليها بواسطة جامع القمامة. ما يمكن أن نكون متأكدين منه هو أنه سيتم مسح جميع كائنات softreferences قبل إلقاء خطأ OutofMemoryError.
-> سيتم إعادة تدوير الكائنات التي يمكن الوصول إليها جيدًا بواسطة جامع القمامة.
-> لا يمكن الوصول إلى الكائن الظاهري القابل للوصول إليه حقًا ، لأنه لا يمكن الوصول إلى كائنه المرجعي من خلال فانتومري ، ويعود طريقة الحصول عليها دائمًا. لكن وجود المراجع الافتراضية يمكن أن يمنع إعادة تدوير الكائنات قبل إزالة المراجع الظاهرية بشكل صريح. تتيح لنا المراجع الافتراضية التعامل مع الكائنات التي تم استدعاء أساليب اللمسات الأخيرة عليها ، مما يجعل من الآمن الاعتقاد بأنهم "ميت".