💎 حافظه هیپ
حافظه هیپ در ذخیره آبجکت های ایجاد شده در زمان اجرای یک برنامه جاوا بسیار موثر است. البته مسیر ارجاع به آبجکت ایجاد شده همچنان در حافظه استک ذخیره میشود که به همان آبجکت ایجاد شده در حافظه هیپ اشاره میکند. حافظه هیپ در مقایسه با حافظه استک، فضای خیلی بزرگتری در اختیار دارد. در حافظه هیپ ابجکت های بلااستفاده توسط گاربیج کالکتور برای ازاد سازی حافظه حذف میشوند.
🔗 درباره گاربیج کالکشن از اینجا بخوانید
🔆 تقسیم بندی حافظه هیپ
حافظه هیپ به سه بخش تقسیم میشود: نسل جدید، نسل قدیم و نسل دائمی.
🔅نسل جدید
نسل جدید بخشی است که به آبجکت های تازه ایجاد شده اختصاص داده میشود. نسل جدید نیز به سه بخش Eden و Survivor 1 و Survivor 2 تقسیم میشود. در ابتدا تمامی آبجکت ها در داخل حافظه Eden قرار گرفته میشوند. پس از پر شدن حافظه Eden، یک گاربیج کالکشن جزئی اتفاق می افتد تا آبجکت های بلااستفاده از سطح حافظه حذف شوند. در این حالت آبجکت های باقیمانده به بخش Survivor 1 و سپس به بخش Survivor 2 انتقال میابند.
🔅نسل قدیم
در ادامه آبجکت های باقیمانده به بخش نسل قدیم انتقال می یابند. در این بخش معمولا کمی از ابجکت ها دوباره توسط گاربیج کالکشن جمع اوری میشوند تا این اطمینان حاصل شود که در این بخش فقط ابجکت های ماندگار وجود دارند.
🔅نسل دائمی
در این بخش JVM برای ذخیره متادیتا (فراداده) در مورد کلاس ها و متد ها استفاده میکند. البته یک نظر اینجا وجود دارد که بیان میکند نسل دائمی جزئی از حافظه هیپ نیست و به یک بخش دیگر اختصاص دارد.
🚫 استثنای OutOfMemoryError
اگر یک ابجکت وجود داشته باشد که فضایی بیشتر از فضای موجود در حافظه هیپ در بر داشته باشد، استثنای OutOfMemoryError رخ خواهد داد. برای مثال:
public class ITHooloo {
public static void main(String[] args) {
int[] array = new int[1000*1000*1000];
}
}
🔗درباره حافظه استک از اینجا بخوانید
#Heap_Memory #Memory #Heap
———
☕️ @PIECEJAVA
حافظه هیپ در ذخیره آبجکت های ایجاد شده در زمان اجرای یک برنامه جاوا بسیار موثر است. البته مسیر ارجاع به آبجکت ایجاد شده همچنان در حافظه استک ذخیره میشود که به همان آبجکت ایجاد شده در حافظه هیپ اشاره میکند. حافظه هیپ در مقایسه با حافظه استک، فضای خیلی بزرگتری در اختیار دارد. در حافظه هیپ ابجکت های بلااستفاده توسط گاربیج کالکتور برای ازاد سازی حافظه حذف میشوند.
🔗 درباره گاربیج کالکشن از اینجا بخوانید
🔆 تقسیم بندی حافظه هیپ
حافظه هیپ به سه بخش تقسیم میشود: نسل جدید، نسل قدیم و نسل دائمی.
🔅نسل جدید
نسل جدید بخشی است که به آبجکت های تازه ایجاد شده اختصاص داده میشود. نسل جدید نیز به سه بخش Eden و Survivor 1 و Survivor 2 تقسیم میشود. در ابتدا تمامی آبجکت ها در داخل حافظه Eden قرار گرفته میشوند. پس از پر شدن حافظه Eden، یک گاربیج کالکشن جزئی اتفاق می افتد تا آبجکت های بلااستفاده از سطح حافظه حذف شوند. در این حالت آبجکت های باقیمانده به بخش Survivor 1 و سپس به بخش Survivor 2 انتقال میابند.
🔅نسل قدیم
در ادامه آبجکت های باقیمانده به بخش نسل قدیم انتقال می یابند. در این بخش معمولا کمی از ابجکت ها دوباره توسط گاربیج کالکشن جمع اوری میشوند تا این اطمینان حاصل شود که در این بخش فقط ابجکت های ماندگار وجود دارند.
🔅نسل دائمی
در این بخش JVM برای ذخیره متادیتا (فراداده) در مورد کلاس ها و متد ها استفاده میکند. البته یک نظر اینجا وجود دارد که بیان میکند نسل دائمی جزئی از حافظه هیپ نیست و به یک بخش دیگر اختصاص دارد.
🚫 استثنای OutOfMemoryError
اگر یک ابجکت وجود داشته باشد که فضایی بیشتر از فضای موجود در حافظه هیپ در بر داشته باشد، استثنای OutOfMemoryError رخ خواهد داد. برای مثال:
public class ITHooloo {
public static void main(String[] args) {
int[] array = new int[1000*1000*1000];
}
}
🔗درباره حافظه استک از اینجا بخوانید
#Heap_Memory #Memory #Heap
———
☕️ @PIECEJAVA
Telegram
کانال تیکه پاره های جاوا
♻️ مفهوم گاربیج کالکشن (Garbage Collection) در جاوا
🟡 گاربیج کالکشن (زباله روب) یک ویژگی جاوا برای مدیریت حافظه است. گاربیج کالکشن اشیا بلا استفاده در سطح حافظه را حذف میکند.
🔰 مثال زیر رو در نظر بگیرید:
Point blank = new Point(3, 4);
blank = null;
خط…
🟡 گاربیج کالکشن (زباله روب) یک ویژگی جاوا برای مدیریت حافظه است. گاربیج کالکشن اشیا بلا استفاده در سطح حافظه را حذف میکند.
🔰 مثال زیر رو در نظر بگیرید:
Point blank = new Point(3, 4);
blank = null;
خط…
❤11