Farzad Afi Logo

FarzadAfi

آموزش تخصصی برنامه نویسی

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

📖توضیحات درس

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

📄جزوه

مفاهیم کلیدی

  • Garbage Collection (GC): : فرایندی خودکار در جاوا که وظیفه مدیریت حافظه را بر عهده دارد. این سیستم به صورت هوشمند اشیایی که دیگر در برنامه استفاده نمی‌شوند را شناسایی و از حافظه حذف می‌کند.

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

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

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

  • Young Generation: بخشی از حافظه Heap که اشیای تازه ساخته شده در آن قرار می‌گیرند. عملیات پاک‌سازی در این بخش سریع و مکرر انجام می‌شود.

  • Old Generation: بخشی از حافظه برای اشیایی که طول عمر بیشتری داشته‌اند. اگر شیئی در چندین مرحله از پاک‌سازی در Young Generation باقی بماند، به این بخش منتقل می‌شود.

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

  • تفاوت مدیریت حافظه در Java و C++ چیست؟ در زبان‌هایی مانند C++ برنامه‌نویس باید به صورت دستی حافظه را تخصیص دهد و آن را آزاد کند، که ریسک خطای انسانی و نشتی حافظه را بالا می‌برد. در جاوا، JVM این کار را به صورت خودکار از طریق Garbage Collector انجام می‌دهد.

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

خیر؛ متدهایی مثل System.gc() تنها یک درخواست به JVM برای اجرای زباله‌روب ارسال می‌کنند. JVM بر اساس مصلحت و اولویت‌های خود تصمیم می‌گیرد چه زمانی آن را اجرا کند و هیچ تضمینی برای اجرای لحظه‌ای وجود ندارد.

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

با از بین بردن رفرنس‌های آن؛ مثلاً قرار دادن مقدار null در متغیر رفرنس، رها کردن شیء در پایان اجرای یک متد، یا اختصاص دادن یک مقدار جدید به متغیری که قبلاً به شیء دیگری اشاره می‌کرد.

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

زمانی که حافظه Heap پر شده باشد و زباله‌روب نتواند با حذف اشیای قدیمی فضای کافی برای اشیای جدید ایجاد کند، برنامه با این خطا کرش می‌کند.

بیشتر بدانید

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

  • نکته برنامه‌نویسی: همیشه سعی کنید اشیا را در محدوده‌ (Scope) متدها تعریف کنید تا پس از پایان متد، حافظه آن‌ها به راحتی توسط GC آزاد شود.

  • فرایند ترفیع (Promotion): اشیایی که از چندین مرحله زباله‌روبی در بخش اشیای جوان (Young) جان سالم به در می‌برند، به بخش اشیای پیر (Old) منتقل می‌شوند چون سیستم فرض می‌کند این اشیا طولانی‌مدت مورد نیاز هستند.

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