دانستنی‌ها

ارجاع ضعیف (Weak reference) در جاوا

در این مطلب به مفهوم ارجاع ضعیف (weak reference) در جاوا می‌پردازیم.

قبل از اینکه شروع کنیم، برخی مقدمات را با هم مرور می‌کنیم.

۴ نوع ارجاع متفاوت در جاوا وجود دارد:

  1. ارجاع قوی (Strong reference)
  2. ارجاع ضعیف (Weak reference)
  3. ارجاع نرم (Soft reference)
  4. ارجاع شبح (Phantom reference)

در این مطلب فقط می‌خواهیم به معرفی ارجاع ضعیف بپردازیم.

ارجاع ضعیف، ارتباط تنگاتنگی با زباله‌روب جاوا دارد. عملیات زباله‌روبی (Garbage collection) به بیان ساده، عملیات آزادسازی خودکار حافظه‌ای است که به آن هیچ ارجاعی وجود ندارد.

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

جاوا به طور پیش‌فرض، ارجاع‌ها را به صورت قوی (همان ارجاع معمولی که تا کنون از آن استفاده می‌کردیم) تعریف می‌کند. برای داشتن یک ارجاع به صورت ضعیف،‌ باید این موضوع را موقع تعریف کردن، مشخص کنیم.

«قابلیت دسترسی» ضعیف چیست؟

«قابلیتِ دسترسی» ضعیف (weak reachability) به این معناست که هیچ ارجاع قوی یا نرمی (soft) به این شی وجود ندارد و تنها راه دسترسی به آن، از طریقِ یک ارجاع ضعیف است. 

شی‌ای که «قابلیت دسترسی» ضعیف دارد، توسط زباله‌روب حذف می‌شود و فضای اشغال‌شده توسطِ آن آزاد می‌شود و باعث بهبود مدیریت حافظه می‌شود.

از ارجاع‌های ضعیف کجا استفاده می‌شود؟

  • از ارجاع‌‌های ضعیف بیشتر در نگاشت کانونی‌شده (canonicalized mappings) استفاده می‌شود. نگاشت کانونی‌شده زمانی است که نگاشت، فقط یک نمونه از یک مقدار خاص را نگه می‌دارد. مطالعه بیشتر
  • از ارجاع‌های ضعیف همچنین به صورت گسترده در کلاس WeakHashMap استفاده شده‌است. این یکی از پیاده‌سازی‌های واسط Mapاست که کلید و مقدار به صورت ارجاع ضعیف نگه‌داری می‌شوند. در صورتی که کلید توسط زباله‌روب پاک شود، آن جفت کلید و مقدار از نگاشت حذف خواهند شد.

نمونه کد:

  • مسئله‌ٔ Lapsed Listener هم از ارجاع ضعیف استفاده می‌کند. مشکلات نشت حافظه در این مورد، به کمک ارجاع ضعیف حل می‌شوند.

پیاده‌سازیِ ارجاع‌های ضعیف

کلاس java.lang.ref.WeakReference  برای استفاده و ساخت ارجاع‌های ضعیف استفاده می‌شود.

یک سناریوی واقعیِ استفاده از ارجاع ضعیف، زمانی است که می‌خواهیم اتصالی به دیتابیس داشته باشیم که بتواند در صورت خاتمه برنامه‌ اصلی، توسط زباله‌روب پاک شود.

نمونه کدی که از ارجاع ضعیف استفاده می‌کند نمایش داده‌ شده‌است:

 

این مقاله ترجمه‌ای از این مطلب از سایت Java Tutorial Network است.

.

.

.

.

با ما همراه باشید


آدرس کانال تلگرام: JavaCupIR@

آدرس اکانت توییتر: JavaCupIR@

آدرس صفحه اینستاگرام: javacup.ir

آدرس گروه لینکدین: Iranian Java Developers

[تعداد: 0   میانگین: 0/5]
برچسب ها
نمایش بیشتر

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا