الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

لماذا يصر البعض على شرح ال Island of Isolation بتلك الطريقة المعقدة

بدأه sameh mahmoud في 2 أبريل 2011 · 10 رد · 968 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

كثير من الموضوعات ( بل اغلبها ) التى تتحدث عن ال Isolation تذكر مثالا كالتالي :

public class Island {
Island i;
public static void main(String [] args) {
Island i2 = new Island();
Island i3 = new Island();
Island i4 = new Island();
i2.i = i3; // i2 refers to i3
i3.i = i4; // i3 refers to i4
i4.i = i2; // i4 refers to i2
i2 = null;
i3 = null;
i4 = null;
}
}

انظر ايضا :

class Beer {   
Beer b;   
public static void main(String... args) {   
    Beer obj1 = new Beer();   
    Beer obj2 = new Beer();   
    obj1.b = obj2;   
    obj2.b = obj1;   
    obj1=null;   
    obj2=null;       
}   
}

اريد ان اعرف لماذا يصممون على وضع Instance Variable من نفس نوع الكلاس , و لماذا عدة كائنات ؟؟؟؟؟ , اليسوا يريدون توضيح ان الكائن المشار اليه عن طريق المرجع الداخلي تم عذله بتعيين القيمة null للمرجع الخارجي ؟؟

اليس المثال التالي يفى بالغرض ؟؟؟؟؟؟

class SomeThing {

     SomeThingElse se;

     public static void main(String[] args){

         Something s = new Something();

         s.se = new SomeThingElse();

         s = null;
     }
}

اليس بذلك يكون الكائن المشار اليه بواسطة s.se معزولا ؟؟؟؟ (islandic) و يكون في تلك الحالة في مجمع النفايات ؟؟؟ eligible for garbage collection ام ان هناك شيئا اغفل عنه ؟؟؟

ارجوكوم يا جماع انا ضيعت الكثير من الوقت لافهم لماذ يصرون على شرحه بالطريقة الاولى

نرجو التوضيح

تم تعديل هذه المشاركة بواسطة sameh mahmoud في 2 أبريل 2011 في 04:48

سبـــــحــــان الله و بحمده سبحان الله العظيم

403100468.gif

#2

نرجو الرد للاهمية القسوى

سبـــــحــــان الله و بحمده سبحان الله العظيم

403100468.gif

#3

انا لم اتفهم ما الفائده من ذلك

لكن انا اعتقد ان انا لم استخدم Instance Variable

فى الكلاس بيكون علشان اجعل الكلاس factory class

يعنى لا يمكن اخذ منها كائن

مثال الكلاس Calender فى الجافا

    	Calendar c = Calendar.getInstance();

لكن لا اعلم عن ماذا تتكلم unsure.gif

Software Developer
Mahmoudkelany.com


 

#4

انظر الكود التالي :

public class Island { 
Island i; 
public static void main(String [] args) { 
Island i2 = new Island(); 
Island i3 = new Island(); 
Island i4 = new Island(); 
i2.i = i3; // i2 refers to i3 
i3.i = i4; // i3 refers to i4 
i4.i = i2; // i4 refers to i2 
i2 = null; 
i3 = null; 
i4 = null; 
} 
}

لماذا قام بهذه الخطوة :

Island i2 = new Island(); 
Island i3 = new Island(); 
Island i4 = new Island();

اليس ذلك كافيا :

Island i2 = new Island();

ثانيا لماذا ال Instance Variable ال i من نفس نوع الكلاس (Island)

ثالثا لماذا التالي :

i2.i = i3; // i2 refers to i3 
i3.i = i4; // i3 refers to i4 
i4.i = i2; // i4 refers to i2

لماذا لم يقوم بالتالي :

i2.i = new Island();
و هكذا

اذا كان يريد ان يثبت ان عزل الكائنات يتم عن طريق اعطاء القيمة null لل reference variable الذى عن طريقه نصل الى المتغير i الذي يشير الى الكائن المعزول فلماذا كل هذه القصص و العقد المذكورة في الكود السابق ؟؟؟؟ :excl:

اليس مثل الكود التالي يفعى بالغرض و يصل نفس المعنى ؟؟؟

class SomeThing { 

     SomeThingElse se; // instance variable from another class

     public static void main(String[] args){ 

         Something s = new Something();

         s.se = new SomeThingElse(); 

         s = null; 
     } 
}

و بذلك يكون الكائن SomethingElse المشار له بال متغير se قد اصبح islandic ؟؟؟

ام ان هناك شئ اغفل عنه جعله يكتب الكود بالطريقة المذكورة ( المعقدة )

و شكرا لك على الرد .

تم تعديل هذه المشاركة بواسطة sameh mahmoud في 2 أبريل 2011 في 21:42

سبـــــحــــان الله و بحمده سبحان الله العظيم

403100468.gif

#5

مرحبا اخى سامح

ممكن تضع الرابط لهذا الدرس حتى نقرأه ربما نجد فيه شيئا اخر


﴿وَمَا كَانَ اللَّهُ لِيُعَذِّبَهُمْ وَأَنْتَ فِيهِمْ ۚ وَمَا كَانَ اللَّهُ مُعَذِّبَهُمْ وَهُمْ يَسْتَغْفِرُونَ﴾

الأنفال ۳۳                                  
 

#7

حدا يشرحلنا الـ Island of Isolation

اول مرة بسمع عنها

إذا نظــرتَ نيـوب اللـّيـثِ بـارزةً         فـلا تظــنَنَ أَنَّ اللـّيـــثَ يبْتسـِـــمُ


 


 


رسم المخططات البيانية بواسطة الجافا


 


كتاب تحليل وتصميم نظم المعلومات


#9

هل لازال الـ gc لا يستطيع التخلص من هذه الكائنات؟

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#10
اقتباس
اريد ان اعرف لماذا يصممون على وضع Instance Variable من نفس نوع الكلاس

هذه لا يشترط وجودها ليتحقق وجود المشكله.

اقتباس
, و لماذا عدة كائنات ؟؟؟؟؟

هذه يجب وجودها, لكي تتحقق الدائره, اي يجب ان يصبح مثالك كالتالي:

class SomeThing { 

     SomeThingElse se; // instance variable from another class

     public static void main(String[] args){ 

         Something s = new Something();
         se =  new SomeThingElse();

         s.se = se; 
         se.s = s;

         s = null; 
     } 
}

راجع عنوان unreachable في الموضوع التالي

بالمناسبه ال GC قادر على اكتشاف هذه الحلقه ومسح هذه ال objects في Java

1
#11

أكثر من رائع يا حج مهدي

بالمناسبة هل هناك أي اختلاف بين أنواع الـ refernces المذكورة هنا

عدا عن ترتيب الـ GC لها في حالة نقص الذاكرة والبحث عن بعض الكائنات للتخلص منها؟

اقتباس

  • Soft references are for implementing memory-sensitive caches.
  • Weak references are for implementing mappings that do not prevent their keys (or values) from being reclaimed. <a name="1002716">
  • Phantom references are for scheduling pre-mortem cleanup actions in a more flexible way than is possible with the Java finalization mechanism.

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…