Garbage Collector in Java | زباله روب در جاوا
📖توضیحات درس
📄جزوه
مفاهیم کلیدی
-
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) شده است و دیگر برای تخریب اشیا پیشنهاد نمیشود.
