Hossein Khoujani
Hossein Khoujani
خواندن ۲ دقیقه·۳ سال پیش

Strong Reference, Soft Reference, Weak Reference, Phantom Reference در جاوا با مفهوم رستوران

قبل از اینکه این داستان رو براتون بگم باید بدونید GC(Garbage Collector) کارش چی هست اینجا میتونید در مورد بخونید.

خب اگه بخواهم خیلی کلی بگیم کار GC چیست وقتی یک شی رو در حافظه قرار بدیم و از اون استفاده نکنیم GC میاد با توجه به نوع مرجعی که اون شی داره از حافظه پاکش میکنه

خب حالا ما میتونیم تایین کنیم که یک شی نیازی هست از حافظه پاک بشه یا نه یا به اصطلاح Strong باشه یا phantom/soft/weak بیایید این رو با یک مثال در دنیای واقعی ببینیم یک رستوران رو در نظر داشته باشید که چهار نوع میز برای رزو کردن داره که شما در اون رستوران یک میز رزو کردید از نوع مثلا strong و الان دارید از این فضا استفاده میکنید که یهو یک مشتری جدید میاد که قراره یک میز رو رزو کنه خب در این حین گارسون رستوران دست به کار میشه در اینجا اقای گارسون چند تا وظیفه مهم داره که باید انجام بده اول از همه باید ببینه نوع میزی که شما رزو کردی چیه اگر شما strong رو رزو کردید با خیال راحت سر جاتون بنشینید چون به شما که برسه سوالی نمیپرسه و رد میشه. اگر شما soft رو رزو کردید و اگر میز خالی وجود داره از شما سوالی نمیشه ولی اگر میز خالی نداشته باشند مجبور هستند میز شما رو به مشتری جدید بدهند باز این یکم بهتره بدبخت weak اگر شما weak رو انتخواب کردید باید در اولین فرصت میزتون ترک کنید و به مشتری جدید بدید یعنی فرقی نمیکنه که میز خالی داشته باشند یا نه در هر صورت باید میز رو تحویل بدید P: خب در این مثال ما phantom رو هم داریم این یکم استفادش ظریف تر هست و معمولا برای large object ها استفاده میشه خب بیایید با همین رستوران این رو درکش کنیم این رستوران یک میز داره که نما یا ویو خیلی خاصی داره که این باعث میشه بعضی مشتری ها برای خالی شدن میز منتظر بمونند در کدنویسی میدونید وقتی یک شی خیلی بزرگ روی رم باشه پاک سازی اون زمان میبره حالا تخمین این زمان رو میتونیم با استفاده از phantom مدیریت کنیم وقتی این شی از صف مربوط به پاکسازی رفت بیرون جای اون رو بدیم به شی دیگه. در این مثال

رستوران Ram بود

گارسون GC

میز ادرس های داخل حافظه

شما و مشتری ها شی بودید (:

این داستان رو به یاد داشته باشید در پست بعدی در دنیای کد چند نمونه با هم انجام میدیم.

javaandroidstrong referencesoft referenceweak reference
Gap Messenger Developer, Telegram Android Client Developer, Crazy Developer
شاید از این پست‌ها خوشتان بیاید