في Java، عندما نقوم بإنشاء كائن من الفئة فإنه يشغل بعض المساحة في الذاكرة (الكومة). إذا لم نحذف هذه الكائنات، فإنها تظل في الذاكرة وتحتل مساحة غير ضرورية لا تستقيم من جانب البرمجة. لحل هذه المشكلة نستخدم مدمر . في هذا القسم، سنناقش الخيار البديل لـ المدمرة في جافا . وسنتعلم أيضًا كيفية استخدام وضع اللمسات النهائية () الطريقة باعتبارها المدمرة.
ال مدمر هو عكس المنشئ. يتم استخدام المنشئ لتهيئة الكائنات بينما يتم استخدام المدمر لحذف أو تدمير الكائن الذي يحرر المورد الذي يشغله الكائن.
تذكر ذلك لا يوجد مفهوم المدمر في جافا . بدلاً من أداة التدمير، توفر Java أداة تجميع البيانات المهملة التي تعمل بنفس طريقة أداة التدمير. جامع البيانات المهملة هو برنامج (خيط) يعمل على JVM . يقوم تلقائيًا بحذف الكائنات غير المستخدمة (الكائنات التي لم تعد مستخدمة) وتحرير الذاكرة. لا يحتاج المبرمج إلى إدارة الذاكرة يدويًا. يمكن أن يكون عرضة للأخطاء، وضعيفًا، وقد يؤدي إلى تسرب الذاكرة.
ما هو المدمر في جافا؟
إنها طريقة خاصة يتم استدعاؤها تلقائيًا عندما لا يتم استخدام الكائن. عندما يكمل كائن دورة حياته، يقوم جامع البيانات المهملة بحذف هذا الكائن وإلغاء تخصيص الذاكرة التي يشغلها الكائن أو تحريرها.
ومن المعروف أيضا باسم الصيغ النهائية التي هي غير حتمية. في جافا ، تخصيص وإلغاء تخصيص الكائنات التي يتم التعامل معها بواسطة جامع القمامة . لا يتم ضمان استدعاء الصيغ النهائية لأنه يستدعي ضمنيًا.
مزايا المدمرة
- يقوم بتحرير الموارد التي يشغلها الكائن.
- لا يلزم إجراء مكالمة صريحة، حيث يتم استدعاؤها تلقائيًا في نهاية تنفيذ البرنامج.
- لا يقبل أي معلمة ولا يمكن تحميله بشكل زائد.
كيف يعمل المدمر؟
عندما يتم إنشاء الكائن فإنه يشغل المساحة الموجودة في الكومة. يتم استخدام هذه الكائنات بواسطة الخيوط. إذا لم تعد الكائنات مستخدمة بواسطة مؤشر الترابط، فإنها تصبح مؤهلة لجمع البيانات المهملة. الذاكرة التي يشغلها هذا الكائن متاحة الآن للكائنات الجديدة التي يتم إنشاؤها. تجدر الإشارة إلى أنه عندما يقوم جامع البيانات المهملة بتدمير الكائن، يستدعي JRE طريقة Finalize () لإغلاق الاتصالات مثل قاعدة البيانات واتصال الشبكة.
مما سبق يمكننا أن نستنتج أن استخدام المدمر وجامع البيانات المهملة هو مستوى تدخل المطور في إدارة الذاكرة. هذا هو الفرق الرئيسي بين الاثنين. يُعلم المدمر بالضبط متى سيتم تدمير الكائن. بينما في Java يقوم جامع البيانات المهملة بنفس العمل تلقائيًا. هذين النهجين لإدارة الذاكرة لهما آثار إيجابية وسلبية. لكن المشكلة الرئيسية هي أنه في بعض الأحيان يحتاج المطور إلى الوصول الفوري إلى إدارة الذاكرة.
طريقة جافا النهائية ().
من الصعب على المبرمج تنفيذ أداة تجميع البيانات المهملة بالقوة لتدمير الكائن. لكن جافا توفر طريقة بديلة لفعل الشيء نفسه. توفر فئة كائن Java وضع اللمسات النهائية () الطريقة التي تعمل بنفس طريقة المدمر. بناء جملة الطريقة النهائية () كما يلي:
بناء الجملة:
protected void finalize throws Throwable() { //resources to be close }
إنها ليست مدمرة ولكنها توفر أمانًا إضافيًا. ويضمن استخدام الموارد الخارجية مثل إغلاق الملف وما إلى ذلك قبل إيقاف تشغيل البرنامج. يمكننا تسميتها باستخدام الطريقة نفسها أو استدعاء الطريقة System.runFinalizersOnExit (صحيح) .
- إنها طريقة محمية لفئة الكائن التي تم تعريفها في حزمة java.lang.
- يمكن استدعاؤه مرة واحدة فقط.
- نحتاج إلى استدعاء الطريقة النهائية () بشكل صريح إذا أردنا تجاوز الطريقة.
- gc() هي إحدى طرق JVM التي ينفذها جامع البيانات المهملة. يتم استدعاؤه عندما تكون ذاكرة الكومة ممتلئة وتتطلب المزيد من الذاكرة للكائنات الجديدة القادمة.
- باستثناء الاستثناءات التي لم يتم التحقق منها، يتجاهل JVM جميع الاستثناءات التي تحدث بواسطة طريقة Finalize ().
مثال على المدمر
DestructorExample.java
public class DestructorExample { public static void main(String[] args) { DestructorExample de = new DestructorExample (); de.finalize(); de = null; System.gc(); System.out.println('Inside the main() method'); } protected void finalize() { System.out.println('Object is destroyed by the Garbage Collector'); } }
انتاج:
Object is destroyed by the Garbage Collector Inside the main() method Object is destroyed by the Garbage Collector