جلسه شماره 27رایگان

Garbage Collector in Java | زباله روب در جاوا

00:35:54

توضیحات جلسه

🎥 این ویدیو قسمت بیست و هفتم از بوت‌کمپ رایگان جاواست. 🧠 آموزش زباله‌روب (Garbage Collector) در جاوا 📝 در این قسمت با یکی از مفاهیم مهم مدیریت حافظه در جاوا آشنا می‌شویم: زباله‌روب یا Garbage Collector. ⚙️ یاد می‌گیریم که زباله‌روب چیست و چه مشکلی را در برنامه‌نویسی جاوا حل می‌کند، چطور حافظه Heap را مدیریت می‌کند و چه انواع مختلفی از عملیات‌های GC وجود دارد. 🔍 با بررسی دقیق فرآیند کار Garbage Collector و روش‌هایی که اشیاء را برای جمع‌آوری آماده می‌کند، درک عمیقی از مدیریت حافظه در جاوا پیدا می‌کنیم. ✅ در پایان با مرور کامل، همه نکات کلیدی را تثبیت می‌کنیم. 👥 گروه پرسش و پاسخ تلگرام: @programmingByFarzadAfi 💬 گروه پرسش و پاسخ بله: @programming_by_farzadafi ❓ هر سوالی داشتی، می‌تونی توی گروه بپرسی؛ من یا مربی‌های گروه کمکت می‌کنیم 🚀 بوت‌کمپ رایگان جاوا – آموزش پروژه‌محور برای یادگیری عمیق و ورود به بازار کار.

جزوه و مستندات

مفاهیم کلیدی

  • Garbage Collection (GC)

Garbage Collection یا GC فرایندی خودکار در جاوا است که وظیفه مدیریت حافظه را بر عهده دارد.

این سیستم به‌صورت هوشمند، اشیایی را که دیگر در برنامه استفاده نمی‌شوند شناسایی می‌کند و آن‌ها را از حافظه حذف می‌کند.

  • Heap Memory

Heap Memory بخشی از حافظه است که همه اشیاء (Object) در زمان اجرا داخل آن ساخته و نگهداری می‌شوند.

زباله‌روب (GC) مستقیماً با همین بخش از حافظه سروکار دارد.

  • Unreachable Objects

Unreachable Objects به اشیایی گفته می‌شود که دیگر هیچ رفرنسی به آن‌ها وجود ندارد و در نتیجه، برنامه‌نویس راهی برای دسترسی به آن‌ها از طریق کد ندارد.

این اشیاء توسط GC شناسایی و پاک‌سازی می‌شوند.

  • Memory Leak

Memory Leak یا نشتی حافظه زمانی رخ می‌دهد که اشیای بی‌استفاده، به‌دلیل وجود رفرنس‌های ناخواسته، توسط GC پاک نمی‌شوند.

این وضعیت در نهایت می‌تواند باعث پر شدن حافظه و توقف برنامه شود.

  • Young Generation

Young Generation بخشی از Heap است که اشیای تازه‌ساخته‌شده در آن قرار می‌گیرند.

عملیات پاک‌سازی در این بخش معمولاً سریع و پرتکرار انجام می‌شود.

  • Old Generation

Old Generation بخشی از Heap است که برای اشیایی با طول عمر بیشتر در نظر گرفته می‌شود.

اگر یک شیء چندین مرحله پاک‌سازی را در Young Generation پشت سر بگذارد، به این بخش منتقل می‌شود.

نکات مهم مصاحبه‌ای

  • تفاوت مدیریت حافظه در Java و C++ چیست؟

در زبان‌هایی مانند C++، برنامه‌نویس باید حافظه را به‌صورت دستی تخصیص دهد و سپس آن را آزاد کند؛ این موضوع ریسک خطای انسانی و Memory Leak را افزایش می‌دهد.

اما در جاوا، JVM این کار را به‌صورت خودکار و از طریق Garbage Collector انجام می‌دهد.

  • آیا می‌توان اجرای زباله‌روب را تضمین کرد؟

خیر.

متدهایی مانند System.gc() فقط یک درخواست به JVM برای اجرای GC ارسال می‌کنند. JVM بر اساس شرایط و اولویت‌های خود تصمیم می‌گیرد چه زمانی این کار را انجام دهد و هیچ تضمینی برای اجرای لحظه‌ای وجود ندارد.

  • چگونه یک شیء را آماده زباله‌روبی (Eligible for GC) کنیم؟

با از بین بردن رفرنس‌های آن شیء.

برای مثال:

  • قرار دادن مقدار null داخل یک متغیر رفرنس

  • خارج شدن شیء از محدوده در پایان اجرای یک متد

  • اختصاص دادن مقدار جدید به متغیری که قبلاً به یک شیء دیگر اشاره می‌کرد

  • ارور OutOfMemoryError چه زمانی رخ می‌دهد؟

زمانی که Heap پر شده باشد و GC نتواند با حذف اشیای قدیمی، فضای کافی برای ایجاد اشیای جدید فراهم کند.

در این حالت، برنامه با خطای OutOfMemoryError متوقف می‌شود.

بیشتر بدانید

  • ابزار VisualVM

یک ابزار کاربردی برای مانیتور کردن وضعیت حافظه و مشاهده زنده عملکرد GC به‌صورت نموداری است.

  • نکته برنامه‌نویسی

تا حد امکان، اشیاء را در Scope متدها تعریف کنید تا پس از پایان متد، آزادسازی حافظه آن‌ها توسط GC ساده‌تر انجام شود.

  • فرایند ترفیع (Promotion)

اشیایی که چندین مرحله زباله‌روبی را در بخش Young پشت سر می‌گذارند، به بخش Old منتقل می‌شوند؛ چون سیستم فرض می‌کند این اشیاء در بلندمدت مورد نیاز هستند.

  • متد finalize()

متد finalize() در نسخه‌های جدید جاوا Deprecated شده است و دیگر برای پاک‌سازی یا تخریب اشیاء پیشنهاد نمی‌شود.