JavaRush /جاوا بلاگ /Random-SD /جاوا ۾ ڪچرو ڪليڪٽر
Diana
سطح

جاوا ۾ ڪچرو ڪليڪٽر

گروپ ۾ شايع ٿيل

گندگي جي ڪليڪٽر جي رويي جي لائن (ياداشت جي بحالي)

جاوا پروگرامر کي ميموري مختص ڪرڻ جي نگراني ڪرڻ جي ضرورت ناهي ڇو ته ڪچرو ڪليڪٽر خودڪار طريقي سان ميموري کي منظم ڪري ٿو. گاربيج ڪليڪٽر جاوا ورچوئل مشين (JVM) ذريعي هلائي ٿو. گاربيج ڪليڪٽر هڪ گهٽ ترجيح وارو عمل آهي جيڪو وقتي طور تي هلندو آهي ۽ انهن شين جي استعمال ڪيل ياداشت کي آزاد ڪري ٿو جن کي هاڻي ضرورت ناهي. مختلف JVMs وٽ مختلف گندگي گڏ ڪرڻ وارا الگورتھم آھن. اتي ڪيترائي الگورتھم استعمال ڪيا ويا آھن، مثال طور: حوالن جي ڳڻپ الگورتھم يا مارڪ اپ ۽ اسڪريپنگ الگورتھم.ڪچرو گڏ ڪرڻ - 1

جاوا ۾ ڪچرو گڏ ڪندڙ کي هلائڻ

JVM عام طور تي گندي ڪليڪٽر کي هلائي ٿو جڏهن مفت ياداشت گهٽ آهي. پر گندگي ڪليڪٽر کي هلائڻ جي ضمانت نه آهي ته اتي هميشه ڪافي مفت ياداشت هوندي. جيڪڏهن وصولي کان پوءِ به ڪافي ياداشت نه آهي، JVM هڪ OutOfMemoryError استثنا اڇلائي ٿو. مهرباني ڪري نوٽ ڪريو ته JVM هڪ استثنا اڇلائڻ کان پهريان گهٽ ۾ گهٽ هڪ ڀيرو ڪچري جي ڪليڪٽر کي هلائڻ گهرجي. توھان گذارش ڪري سگھوٿا ڪچري جي ڪليڪٽر کي جاوا ۾ ھلڻ لاءِ، پر توھان مجبور نه ٿا ڪري سگھو ھن عمل کي.

گذارش آهي ته ڪچرو کڻندڙ کي هلايو وڃي

درخواست ڪرڻ لاء، توھان ھيٺ ڏنل طريقن مان ھڪڙي کي سڏي سگھو ٿا:
System.gc()
Runtime.getRuntime().gc()

ڪچرو ڪليڪٽر کي هلائڻ لاءِ موزونيت

ڪنهن شئي کي ڊسپوز ڪيو وڃي جڏهن اهو زندهه وهڪرو لاءِ موجود نه هجي. هڪ اعتراض مختلف صورتن ۾ ختم ڪرڻ جي تابع ٿي سگهي ٿو:
  • جيڪڏهن حوالن جي قسم جو هڪ متغير جيڪو ڪنهن شئي ڏانهن اشارو ڪري ٿو "0" تي مقرر ڪيو ويو آهي، اعتراض کي ختم ڪيو وڃي جيڪڏهن ان ۾ ڪو ٻيو حوالو نه هجي.
  • جيڪڏهن حوالن جي قسم جو هڪ متغير جيڪو هڪ اعتراض ڏانهن اشارو ڪري ٿو، ڪنهن ٻئي شئي ڏانهن اشارو ڪرڻ لاء ٺهيل آهي، اعتراض کي ختم ڪيو وڃي جيڪڏهن ان ۾ ڪو ٻيو حوالو نه هجي.
  • ھڪڙي طريقي ۾ مقامي طور تي ٺاھيل شيون رد ڪيون وينديون آھن جڏھن طريقو نڪرندو آھي، جيستائين اھي ان طريقي مان برآمد نه ڪيا وڃن (يعني، واپسي يا ھڪڙي استثنا جي طور تي اڇلائي).
  • اهي شيون جيڪي هڪ ٻئي جو حوالو ڏين ٿيون انهن کي ختم ڪرڻ جي تابع ٿي سگهي ٿي جيڪڏهن انهن مان ڪوبه لائيو موضوع تي دستياب ناهي.
اچو ته هڪ مثال ڏسو:
public class TestGC
  {
    public static void main(String [] args)
    {
      Object o1 = new Integer(3);               // Line 1
      Object o2 = new String("Tutorial");       // Line 2
      o1 = o2;                                  // Line 3
      o2 = null;                                // Line 4
      // Rest of the code here
    }
  }
هن مثال ۾ Integer، اعتراض (integer) اصل ۾ اشارو ڪيو ويو آهي پوائنٽر o1 کي ختم ڪري سگهجي ٿو لڪير 3 کان پوءِ ڇاڪاڻ ته o1 هاڻي اعتراض String(string) ڏانهن اشارو ڪري ٿو. جيتوڻيڪ o2 null جي حوالي ڪرڻ لاءِ ٺاهيو ويو آهي، اعتراض String(string) recyclable نه آهي ڇاڪاڻ ته o1 ان ڏانهن اشارو ڪري ٿو.

فائنل ڪرڻ

جاوا ٽيڪنالاجي توهان کي هڪ طريقو استعمال ڪرڻ جي اجازت ڏئي ٿي finalize()(حتمي طور تي) ضروري صفائي ڪرڻ لاءِ ان کان اڳ جو ڪچرو ڪليڪٽر ميموري مان ڪا شئي ٻيهر حاصل ڪري. اهو طريقو ڪنهن شئي تي ردي جي ڪليڪٽر طرفان سڏيو ويندو آهي جڏهن ڪچرو ڪليڪٽر اهو طئي ڪري ٿو ته اعتراض ڏانهن وڌيڪ حوالا نه آهن. اهو ڪلاس ۾ بيان ڪيو ويو آهي Object، جنهن جو مطلب آهي ته اهو سڀني طبقن کان وراثت آهي. ذيلي ڪلاس finalize()پاڻ کي سسٽم وسيلن کان آزاد ڪرڻ يا ٻي صفائي لاءِ طريقي کي ختم ڪري ٿو:
protected void finalize() throws Throwable
جيڪڏهن هڪ غير رجسٽر ٿيل استثنا طريقي سان اڇلايو ويندو آهي finalize()، استثنا کي نظر انداز ڪيو ويندو آهي ۽ ان اعتراض کي حتمي شڪل ڏيڻ بند ٿي ويندو آهي. طريقو finalize()صرف هڪ ڀيرو اعتراض جي زندگيء جي دوران سڏيو ويندو. اهو ممڪن آهي ته finalize()ڪنهن به شيء تي هڪ طريقو استعمال ڪرڻ لاء ان کي ضايع ڪرڻ کان بچائڻ لاء. پر هن معاملي ۾، گند ڪليڪٽر هاڻي finalize()هن اعتراض لاء چالو نه آهي. اهو طريقو finalize()هميشه هڪ ڀيرو سڏيو ويندو ان کان اڳ جو اعتراض گڏ ڪيو ويندو آهي گندگي گڏ ڪرڻ. بهرحال، اهو ممڪن آهي ته اهو طريقو finalize()هڪ ڏنل اعتراض لاء ان جي وجود جي پوري عرصي تائين چالو نه ڪيو ويندو، ڇاڪاڻ ته اهو ختم ٿيڻ جي تابع نه ٿي سگهي.

خلاصو

هن حصي ۾، اسان ڏٺو ته ڪچرو گڏ ڪرڻ واري عمل کي، جيڪو جاوا ٻوليءَ ۾ ميموري مئنيجمينٽ ٽيڪنڪ آهي. ڪچرو گڏ ڪرڻ تي مجبور نه ٿو ڪري سگهجي. اسان مختلف طريقن جي باري ۾ سکيو ته شين کي ريسائڪل ڪرڻ لاءِ اهل بڻايو وڃي ۽ اهو معلوم ڪيو ته اهو طريقو finalize()استعمال ڪيو ويندو آهي ان کان اڳ جو اعتراض ڪچري جي ڪليڪٽر طرفان ٻيهر اعلان ڪيو وڃي.

مشق

سوال: لائن 7 کان پوءِ ڪيتريون شيون ڊسپوزل ٿي وينديون؟
public class TutorialGC
  {
    public static void main(String [] args)
    {
      Object a = new Integer(100);  // Line1
      Object b = new Long(100);     // Line2
      Object c = new String("100"); // Line3
      a = null;                     // Line4
      a = c;                        // Line5
      c = b;                        // Line6
      b = a;                        // Line7
      // Rest of the code here
    }
  }
جواب جا آپشن: A. 0 B. 1 C. 2 D. 3 E. ڪوڊ مرتب نه ٿو ڪري سگھجي صحيح آپشن: B وضاحت: ٽن شين مان جيڪي سٽون 1، 2 ۽ 3 ۾ ٺهيل آهن، انهن مان صرف اعتراض کي Integerختم ڪيو وڃي. لڪير 7 جي آخر ۾. متغير حوالا، a، جيڪو اصل ۾ اعتراض جو حوالو ڏئي ٿو ، لڪير 5 تي Integerاعتراض جو حوالو ڏئي ٿو . اهڙيء طرح، اعتراض کي ختم ڪيو وڃي لڪير 5 کان پوء، ڇاڪاڻ ته ڪو به متغير نه آهي جيڪو ان جو حوالو ڏئي ٿو. متغير ۽ لڪير 6 ۽ 7 ۾ شيون ۽ شيون جو حوالو ڏيو، تنهن ڪري اهي ٻيهر نه هوندا آهن.StringIntegerbcStringLong
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION