درس 15 از 33
در حال پیشرفت

مدیریت حافظه در جاوا: Garbage Collection

خب توی مثال  قبلی بازی حدس عدد هر بار که حلقه دوباره اجرا می‌شه، یه عدد تصادفی جدید ساخته می‌شه و متغیر targetNumber به اون عدد جدید اشاره می‌کنه.
عدد قبلی که تو حافظه بود، دیگه بهش نیازی نداریم چون targetNumber به عدد جدید اشاره کرده. اینجاست که Garbage Collection وارد عمل می‌شه و اون عدد قبلی رو از حافظه حذف می‌کنه.

وقتی یه شیء توی جاوا ساخته می‌شه، وارد یه بخش خاص از حافظه به اسم Heap (انبار) می‌شه. این انبار جاییه که همه‌ی اشیاء جاوا—هر جا و هر زمانی که ساخته بشن—اونجا زندگی می‌کنن.

اما این انبار یه ویژگی خیلی خاص داره: Garbage Collection یا مدیریت زباله!

Garbage Collection چطور کار می‌کنه؟

  1. اختصاص حافظه (Memory Allocation):
    وقتی یه شیء می‌سازی، جاوا مقدار حافظه‌ی لازم رو توی Heap بهش اختصاص می‌ده. مثلاً اگه شیءت 15 ویژگی داشته باشه، جاوا برای نگهداری اون ویژگی‌ها بهش فضای بیشتری می‌ده نسبت به یه شیء با دو ویژگی.

  2. جمع‌آوری زباله (Garbage Collection):
    جاوا خودش حافظه‌ی اشیائی که دیگه استفاده نمی‌شن رو آزاد می‌کنه.

    • اگه JVM ببینه که هیچ راهی برای دسترسی به یه شیء نیست، اون شیء تبدیل به زباله (Garbage) می‌شه.
    • وقتی حافظه کم بشه، Garbage Collector اجرا می‌شه، اشیاء غیرقابل دسترسی رو پاک می‌کنه، و حافظه‌شون رو برای استفاده‌های بعدی آزاد می‌کنه.

نکته‌ی کلیدی:

هر شیئی که دیگه توسط هیچ متغیری اشاره نشه، برای Garbage Collection در نظر گرفته می‌شه.

به طور مثال:

				
					class Test {  
  public static void main(String[] args) {  
    Dog d1 = new Dog(); // Dog ساخت یه شیء از نوع
    Dog d2 = new Dog();  

    d1 = null;  // حالا شیء اول قابل دسترسی نیست  
    d2 = null;  // حالا شیء دوم هم قابل دسترسی نیست  

    // Garbage Collector می‌تونه این دو شیء رو پاک کنه  
  }  
}

				
			

نکته‌های جالب در مورد Heap:

  • همه‌ی اشیاء جاوا توی Heap ساخته می‌شن.
  • JVM خودش تصمیم می‌گیره کی Garbage Collector رو اجرا کنه.
  • اگه شیئی قابل دسترسی باشه (مثلاً هنوز متغیری بهش اشاره می‌کنه)، پاک نمی‌شه.