السلام عليكم كيف استطيع اعمل free memory عند الخروج من Jframe الى فريم اخر
dispose لاتعمل
السلام عليكم كيف استطيع اعمل free memory عند الخروج من Jframe الى فريم اخر
dispose لاتعمل
protected void finalize(){
System.gc();
}Unix is user friendly. It's just selective about who its friends are .
superamh كتب:السلام عليكم كيف استطيع اعمل free memory عند الخروج من Jframe الى فريم اخر
dispose لاتعمل
كيف عرفت ان dispose لا تعمل؟؟ الغرض الأساسي من هذه الطريقة هو تحرير الموارد المستعملة من طرف الJFrame
EZ.ELDEEN كتب:protected void finalize(){ System.gc(); }
حتى عند النداء على الطريقة gc، فذلك لا يعني أن الgarbage collector سيمر على الفور. هذه الطريقة تقوم فقط بطلب مرور الgarbage collector، لكنها لا تجبره على المرور.
dispose هو الحل الصحيح
ثم بعد ذلك يتم إزالة كل الروابط عن الكائن JFrame
بعدها يقوم الأخ gc بإزالة الكائن من الذاكرة
لكن لا ضمان لوقت الإزالة
بالمناسبة حتى استخدام الدالة finalize لا يعتمد عليه لأنها يتم مناداتها عند عمل الأخ gc والأخ gc غير مأمون العواقب
تحياتي
هاد سر كيف عملتها، بس القصد منها التحية و التقدير لكل من احبه
اذا انشأت كائن وبعد فترة لم تعد بحاجته اجعله يؤشر على قيمة null.
الدالة finalize ممكن ان تكون خطيرة اذا كانت time-critical مثل الاعتماد عليها لاغلاق الملفات ولأن فتح الملفات limited resource
ممكن أن يؤثر تاخر استدعاء ال finalize على اداء البرنامج فيمتلئ بالكائنات الغير لازمة ولا تستطيع فتح ملفات حينها.
هذا المثال مذكور في كتاب
Effective Java
Item 7:Avoid finalizers
للاسف ياخوان جميع الحلول غير فعاله
لكن
system.exit(0)
تعمل لكنها غير عملية حيث يجب الخروج من البرنامج نهائيا
superamh كتب:للاسف ياخوان جميع الحلول غير فعاله
لكن
system.exit(0)
تعمل لكنها غير عملية حيث يجب الخروج من البرنامج نهائيا
إذا كنت تتكلم بالألغاز فلن يستطيع أحد مساعدتك.
اشرح المشكلة أكثر وأرنا الكود
new Thread(new Runnable(){
while(true)
{
try{
System.gc();
Thread.sleep(100);}catch(Exception e){}
}
}).start();superamh كتب:السلام عليكم كيف استطيع اعمل free memory عند الخروج من Jframe الى فريم اخر
dispose لاتعمل
أهلاً عبدالله، شوف، دالة الـ Dispose يعتمد وجودها وعملها على الكائن الحاوي لها بينما الـ GC تشمل إدارة الذاكرة عموماً وهي اختصار لـ Garbage Collectors يعني تقدر تقول عمال النظافة:)
الثانية ميزتها انها تستدعى تلقائياً والأولى لازم تستدعيها على كل كائن إلا ان الجافا تتحكم فيها تلقائياً عن طريق الـ GC
إذا أردت أستدعاء اياً فيهم يدوياً، ممكن تستخدم الـ Destructor واللي يحمل نفس إسم الـ Constructor مع tiled كبادئة ~
مثال
private class AMH
{
AMH() //The constructor
{...}
~AMH() //The destructor
{this.GC()}
}وبالنسبة للدالة Exit الرقم 0 اللي الاخوة حاطينه يعطي إشارة للمعالج أن البرنامج تم الخروج منه بدون أخطاء لأن أي قيمة أخرى ترجع من إنهاء البرنامج غير الصفر تدل على خطأ إستدعى إقفال النظام بشكل غير سليم مع وجود قيم باقية في الذاكرة مما قد يحفز تدخل نظام التشغيل في تنظيف الشوائب العالقة في الذاكرة العشوائية واللي تم تحميلها عبر الثريد الأساسي للنظام Main
تصبح على خير!
تم تعديل هذه المشاركة بواسطة herch في 3 يناير 2010 في 21:34 — السبب: إضافة الوسم [code]
لا وجود للdesctructor في الجافا، ما تتكلم عنه موجود في C++ وليس java
تم تعديل هذه المشاركة بواسطة herch في 3 يناير 2010 في 21:39