🔴 مدیریت حافظه در زبان های برنامه نویسی مدرن
🟢Introduction to Memory management
🟡 https://t.me/gopher_academy/778
🟢What is it?
🟡 https://t.me/gopher_academy/779
🟢Stack
🟡 https://t.me/gopher_academy/780
🟢Stack & Heap visualized
🟡 https://t.me/gopher_academy/781
🟢Heap
🟡 https://t.me/gopher_academy/782
🟢Why is it important?
🟡 https://t.me/gopher_academy/783
🟢Different approaches?
🟡 https://t.me/gopher_academy/784
🟢Manual memory management
🟡 https://t.me/gopher_academy/787
🟢Garbage collection(GC)
🟡 https://t.me/gopher_academy/788
🟢Garbage collection visualized
🟡 https://t.me/gopher_academy/789
🟢Resource Acquisition is Initialization (RAII)
🟡 https://t.me/gopher_academy/791
🟢Automatic Reference Counting(ARC)
🟡 https://t.me/gopher_academy/792
➖➖➖➖➖➖➖➖➖
🔰 @gopher_academy
🟢Introduction to Memory management
🟡 https://t.me/gopher_academy/778
🟢What is it?
🟡 https://t.me/gopher_academy/779
🟢Stack
🟡 https://t.me/gopher_academy/780
🟢Stack & Heap visualized
🟡 https://t.me/gopher_academy/781
🟢Heap
🟡 https://t.me/gopher_academy/782
🟢Why is it important?
🟡 https://t.me/gopher_academy/783
🟢Different approaches?
🟡 https://t.me/gopher_academy/784
🟢Manual memory management
🟡 https://t.me/gopher_academy/787
🟢Garbage collection(GC)
🟡 https://t.me/gopher_academy/788
🟢Garbage collection visualized
🟡 https://t.me/gopher_academy/789
🟢Resource Acquisition is Initialization (RAII)
🟡 https://t.me/gopher_academy/791
🟢Automatic Reference Counting(ARC)
🟡 https://t.me/gopher_academy/792
➖➖➖➖➖➖➖➖➖
🔰 @gopher_academy
Gopher Academy
🔴 مدیریت حافظه در زبان های برنامه نویسی مدرن 🟢Introduction to Memory management 🟡 https://t.me/gopher_academy/778 🟢What is it? 🟡 https://t.me/gopher_academy/779 🟢Stack 🟡 https://t.me/gopher_academy/780 🟢Stack & Heap visualized 🟡 https://t.me/gopher_academy/781…
🟢Introduction to Memory management
🟡 مدیریت حافظه یکی از کارکردهای سیستم عامل است که به مدیریت حافظه اصلی و جابجایی پردازشها بین حافظه اصلی و دیسک در طی اجرا میپردازد.
🟡 مدیریت حافظه صرف نظر از این که موقعیتهای مختلف حافظه به پردازشی تخصیص یافتهاند یا نه، همه آنها را مدیریت میکند.
🟡 این فرایند میزان حافظهای که باید به پردازشها تخصیص یابد را تعیین میکند.
🟡 مدیریت حافظه تصمیم میگیرد که در هر زمان کدام پردازش به حافظه دسترسی داشته باشد. مدیریت حافظه به ردگیری مقدار حافظه تخصیص یافته یا آزاد شده پرداخته و وضعیتهای متناظر با آنها را بهروزرسانی میکند.
➖➖➖➖➖➖➖➖➖
🔰 @gopher_academy
🟡 مدیریت حافظه یکی از کارکردهای سیستم عامل است که به مدیریت حافظه اصلی و جابجایی پردازشها بین حافظه اصلی و دیسک در طی اجرا میپردازد.
🟡 مدیریت حافظه صرف نظر از این که موقعیتهای مختلف حافظه به پردازشی تخصیص یافتهاند یا نه، همه آنها را مدیریت میکند.
🟡 این فرایند میزان حافظهای که باید به پردازشها تخصیص یابد را تعیین میکند.
🟡 مدیریت حافظه تصمیم میگیرد که در هر زمان کدام پردازش به حافظه دسترسی داشته باشد. مدیریت حافظه به ردگیری مقدار حافظه تخصیص یافته یا آزاد شده پرداخته و وضعیتهای متناظر با آنها را بهروزرسانی میکند.
➖➖➖➖➖➖➖➖➖
🔰 @gopher_academy
Gopher Academy
🔴 مدیریت حافظه در زبان های برنامه نویسی مدرن 🟢Introduction to Memory management 🟡 https://t.me/gopher_academy/778 🟢What is it? 🟡 https://t.me/gopher_academy/779 🟢Stack 🟡 https://t.me/gopher_academy/780 🟢Stack & Heap visualized 🟡 https://t.me/gopher_academy/781…
🟢What is it?
🟡 هنگامی که یک نرم افزار بر روی یک سیستم عامل اجرا می شود ، نیاز به دسترسی حافظه RAM دارد:
🔻 بایت کد خاص خود را بارگیری کنید که باید اجرا شود-
تعریف 👈🏻( بایت کد یا (intermediate code)، کد برنامهنویسی هست که یک ماشین مجازی رو به جای یک معماری کامپیوتر خاص هدف قرار میده. بایت کد به یک باینری کامپایل شده اجازه اجرا شدن میده و یا بروی مجموعه متنوعی از سیستمعامل اجرا بشه.)
🔻مقادیر داده ها و ساختارهای داده مورد استفاده توسط برنامه ای که اجرا می شود را ذخیره می کند
🔻 زمان اجرای مورد نیاز برای اجرای برنامه را بارگیری می کند
🟡 وقتی یک برنامه نرم افزاری از حافظه استفاده می کند ، دو منطقه حافظه وجود دارد که آنها از آن استفاده می کنند ،
از منطقه حافظه Stack و Heap استفاده می شود
➖➖➖➖➖➖➖➖➖
🔰 @gopher_academy
🟡 هنگامی که یک نرم افزار بر روی یک سیستم عامل اجرا می شود ، نیاز به دسترسی حافظه RAM دارد:
🔻 بایت کد خاص خود را بارگیری کنید که باید اجرا شود-
تعریف 👈🏻( بایت کد یا (intermediate code)، کد برنامهنویسی هست که یک ماشین مجازی رو به جای یک معماری کامپیوتر خاص هدف قرار میده. بایت کد به یک باینری کامپایل شده اجازه اجرا شدن میده و یا بروی مجموعه متنوعی از سیستمعامل اجرا بشه.)
🔻مقادیر داده ها و ساختارهای داده مورد استفاده توسط برنامه ای که اجرا می شود را ذخیره می کند
🔻 زمان اجرای مورد نیاز برای اجرای برنامه را بارگیری می کند
🟡 وقتی یک برنامه نرم افزاری از حافظه استفاده می کند ، دو منطقه حافظه وجود دارد که آنها از آن استفاده می کنند ،
از منطقه حافظه Stack و Heap استفاده می شود
➖➖➖➖➖➖➖➖➖
🔰 @gopher_academy
Gopher Academy
🔴 مدیریت حافظه در زبان های برنامه نویسی مدرن 🟢Introduction to Memory management 🟡 https://t.me/gopher_academy/778 🟢What is it? 🟡 https://t.me/gopher_academy/779 🟢Stack 🟡 https://t.me/gopher_academy/780 🟢Stack & Heap visualized 🟡 https://t.me/gopher_academy/781…
🟢Stack
🟡 پشته برای تخصیص حافظه استاتیک استفاده می شود و همانطور که از نامش پیداست آخرین پشته در اولین خروجی (LIFO) است
🟡با توجه به این ماهیت ، فرآیند ذخیره و بازیابی اطلاعات از stack بسیار سریع است زیرا نیازی به جستجو نیست ، شما فقط داده ها را از بالاترین بلوک موجود در آن ذخیره و بازیابی می کنید.
🟡اما این بدان معنی است که هر داده ای که روی stack ذخیره می شود باید محدود و ساکن باشد (اندازه داده ها در زمان کامپایل مشخص است).
🟡 این جایی است که داده های اجرای توابع به عنوان فریم های stack ذخیره می شوند. هر فریم یک بلوک از فضا است که داده های مورد نیاز برای آن عملکرد در آن ذخیره می شود. به عنوان مثال ، هر بار که یک تابع متغیر جدیدی را اعلام می کند ، "به" بالاترین بلوک stack "رانده می شود". سپس با هر بار خروج از عملکرد ، بالاترین بلوک پاک می شود ، بنابراین تمام متغیرهایی که توسط آن تابع به stack رانده می شوند ، پاک می شوند. اینها را می توان در زمان کامپایل با توجه به استاتیک بودن داده های ذخیره شده تعیین کرد.
🟡 برنامه های Multi-threaded می توانند در هر stack یه thread داشته باشند.
🟡 مدیریت حافظه stack ساده و سرراست است و توسط سیستم عامل انجام می شود.
🟡 داده های معمولی که روی stack ذخیره می شوند متغیرهای محلی ، نشانگرها و فریم های تابع هستند.
🟡 اینجاست که با خطاهای stack overflow مواجه می شوید زیرا اندازه stack در مقایسه با Heap محدود است.
❌به ویدیو زیر توجه کنبد❌
➖➖➖➖➖➖➖➖➖
🔰 @gopher_academy
🟡 پشته برای تخصیص حافظه استاتیک استفاده می شود و همانطور که از نامش پیداست آخرین پشته در اولین خروجی (LIFO) است
🟡با توجه به این ماهیت ، فرآیند ذخیره و بازیابی اطلاعات از stack بسیار سریع است زیرا نیازی به جستجو نیست ، شما فقط داده ها را از بالاترین بلوک موجود در آن ذخیره و بازیابی می کنید.
🟡اما این بدان معنی است که هر داده ای که روی stack ذخیره می شود باید محدود و ساکن باشد (اندازه داده ها در زمان کامپایل مشخص است).
🟡 این جایی است که داده های اجرای توابع به عنوان فریم های stack ذخیره می شوند. هر فریم یک بلوک از فضا است که داده های مورد نیاز برای آن عملکرد در آن ذخیره می شود. به عنوان مثال ، هر بار که یک تابع متغیر جدیدی را اعلام می کند ، "به" بالاترین بلوک stack "رانده می شود". سپس با هر بار خروج از عملکرد ، بالاترین بلوک پاک می شود ، بنابراین تمام متغیرهایی که توسط آن تابع به stack رانده می شوند ، پاک می شوند. اینها را می توان در زمان کامپایل با توجه به استاتیک بودن داده های ذخیره شده تعیین کرد.
🟡 برنامه های Multi-threaded می توانند در هر stack یه thread داشته باشند.
🟡 مدیریت حافظه stack ساده و سرراست است و توسط سیستم عامل انجام می شود.
🟡 داده های معمولی که روی stack ذخیره می شوند متغیرهای محلی ، نشانگرها و فریم های تابع هستند.
🟡 اینجاست که با خطاهای stack overflow مواجه می شوید زیرا اندازه stack در مقایسه با Heap محدود است.
❌به ویدیو زیر توجه کنبد❌
➖➖➖➖➖➖➖➖➖
🔰 @gopher_academy
Gopher Academy
🔴 مدیریت حافظه در زبان های برنامه نویسی مدرن 🟢Introduction to Memory management 🟡 https://t.me/gopher_academy/778 🟢What is it? 🟡 https://t.me/gopher_academy/779 🟢Stack 🟡 https://t.me/gopher_academy/780 🟢Stack & Heap visualized 🟡 https://t.me/gopher_academy/781…
🟢Heap
🟡درواقع Heap برای تخصیص حافظه پویا استفاده می شود و بر خلاف پشته ، برنامه باید با استفاده از اشاره گرها اطلاعات موجود در heap را جستجو کند
🟡کندتر از پشته است زیرا فرآیند جستجوی داده ها بیشتر درگیر است اما می تواند داده های بیشتری نسبت به پشته ذخیره کند.
🟡این بدان معنی است که داده هایی با اندازه پویا می توانند در اینجا ذخیره شوند.
🟡به دلیل طبیعت پویا ، مدیریت آن پیچیده تر است و اینجاست که بیشتر مسائل مربوط به مدیریت حافظه از آن ناشی می شود و در اینجا راه حل های مدیریت خودکار حافظه از زبان شروع می شود.
🟡داده های معمولی که در پشته ذخیره می شوند متغیرهای سراسری ، انواع مرجع مانند اشیا، ، رشته ها ، نقشه ها و سایر ساختارهای داده پیچیده هستند.
🟡این جایی است که اگر برنامه شما سعی کند از حافظه بیشتری نسبت به پشته اختصاص یافته استفاده کند ، با خطاهای حافظه روبرو خواهید شد (اگرچه فاکتورهای دیگری مانند GC ، فشرده سازی در اینجا وجود دارد).
🟡به طور کلی ، هیچ محدودیتی در اندازه مقداری که می تواند روی پشته ذخیره شود ، وجود ندارد. البته ، حد بالایی از میزان حافظه اختصاص داده شده به برنامه وجود دارد.
➖➖➖➖➖➖➖➖➖
🔰 @gopher_academy
🟡درواقع Heap برای تخصیص حافظه پویا استفاده می شود و بر خلاف پشته ، برنامه باید با استفاده از اشاره گرها اطلاعات موجود در heap را جستجو کند
🟡کندتر از پشته است زیرا فرآیند جستجوی داده ها بیشتر درگیر است اما می تواند داده های بیشتری نسبت به پشته ذخیره کند.
🟡این بدان معنی است که داده هایی با اندازه پویا می توانند در اینجا ذخیره شوند.
🟡به دلیل طبیعت پویا ، مدیریت آن پیچیده تر است و اینجاست که بیشتر مسائل مربوط به مدیریت حافظه از آن ناشی می شود و در اینجا راه حل های مدیریت خودکار حافظه از زبان شروع می شود.
🟡داده های معمولی که در پشته ذخیره می شوند متغیرهای سراسری ، انواع مرجع مانند اشیا، ، رشته ها ، نقشه ها و سایر ساختارهای داده پیچیده هستند.
🟡این جایی است که اگر برنامه شما سعی کند از حافظه بیشتری نسبت به پشته اختصاص یافته استفاده کند ، با خطاهای حافظه روبرو خواهید شد (اگرچه فاکتورهای دیگری مانند GC ، فشرده سازی در اینجا وجود دارد).
🟡به طور کلی ، هیچ محدودیتی در اندازه مقداری که می تواند روی پشته ذخیره شود ، وجود ندارد. البته ، حد بالایی از میزان حافظه اختصاص داده شده به برنامه وجود دارد.
➖➖➖➖➖➖➖➖➖
🔰 @gopher_academy
Gopher Academy
🔴 مدیریت حافظه در زبان های برنامه نویسی مدرن 🟢Introduction to Memory management 🟡 https://t.me/gopher_academy/778 🟢What is it? 🟡 https://t.me/gopher_academy/779 🟢Stack 🟡 https://t.me/gopher_academy/780 🟢Stack & Heap visualized 🟡 https://t.me/gopher_academy/781…
🟢Why is it important?
چرا مهم است؟
🟡 برخلاف درایوهای هارد دیسک ، RAM بی نهایت نیست. اگر برنامه ای بدون اینکه حافظه را آزاد کند ، به مصرف حافظه ادامه دهد ، در نهایت حافظه آن تمام می شود . از این رو برنامه های نرم افزاری نمی توانند فقط حافظه RAM را همانطور که دوست دارند ادامه دهند زیرا باعث از بین رفتن حافظه دیگر برنامه ها و فرایندها می شود. بنابراین بیشتر از زبانهای برنامه نویسی به جای اینکه به توسعه دهنده نرم افزار این مسئله را بفهمند ، روشهایی برای مدیریت خودکار حافظه ارائه می دهند. و هنگامی که ما در مورد مدیریت حافظه صحبت می کنیم بیشتر در مورد مدیریت حافظه Heap صحبت می کنیم.
➖➖➖➖➖➖➖➖➖
🔰 @gopher_academy
چرا مهم است؟
🟡 برخلاف درایوهای هارد دیسک ، RAM بی نهایت نیست. اگر برنامه ای بدون اینکه حافظه را آزاد کند ، به مصرف حافظه ادامه دهد ، در نهایت حافظه آن تمام می شود . از این رو برنامه های نرم افزاری نمی توانند فقط حافظه RAM را همانطور که دوست دارند ادامه دهند زیرا باعث از بین رفتن حافظه دیگر برنامه ها و فرایندها می شود. بنابراین بیشتر از زبانهای برنامه نویسی به جای اینکه به توسعه دهنده نرم افزار این مسئله را بفهمند ، روشهایی برای مدیریت خودکار حافظه ارائه می دهند. و هنگامی که ما در مورد مدیریت حافظه صحبت می کنیم بیشتر در مورد مدیریت حافظه Heap صحبت می کنیم.
➖➖➖➖➖➖➖➖➖
🔰 @gopher_academy
Gopher Academy
🔴 مدیریت حافظه در زبان های برنامه نویسی مدرن 🟢Introduction to Memory management 🟡 https://t.me/gopher_academy/778 🟢What is it? 🟡 https://t.me/gopher_academy/779 🟢Stack 🟡 https://t.me/gopher_academy/780 🟢Stack & Heap visualized 🟡 https://t.me/gopher_academy/781…
🟢Different approaches?
رویکردهای مختلف؟
🟡 از آنجا که زبانهای برنامه نویسی مدرن نمی خواهند فقظ یه روش را تحویل توسعه دهنده بدند یا همون دیکتاتوری ، توسعه دهنده ها برای مدیریت حافظه برنامه خود ، راهی برای مدیریت خودکار حافظه ابداع کرده اند. برخی از زبان های قدیمی هنوز به دستکاری حافظه دستی نیاز دارند اما بسیاری از آنها روش های شفافی را برای انجام این کار ارائه می دهند. بعضی از زبانها از چندین روش برای مدیریت حافظه استفاده می كنند و حتی بعضی از آنها به توسعه دهنده اجازه می دهند كه بهترین گزینه را برای خود انتخاب كند (C ++ مثال خوبی است). رویکردها را می توان به صورت زیر دسته بندی کرد
🔴Manual memory management
🔴Garbage collection(GC)
🔴Resource Acquisition is Initialization (RAII)
🔴Automatic Reference Counting(ARC)
🔴Ownership
➖➖➖➖➖➖➖➖➖
🔰 @gopher_academy
رویکردهای مختلف؟
🟡 از آنجا که زبانهای برنامه نویسی مدرن نمی خواهند فقظ یه روش را تحویل توسعه دهنده بدند یا همون دیکتاتوری ، توسعه دهنده ها برای مدیریت حافظه برنامه خود ، راهی برای مدیریت خودکار حافظه ابداع کرده اند. برخی از زبان های قدیمی هنوز به دستکاری حافظه دستی نیاز دارند اما بسیاری از آنها روش های شفافی را برای انجام این کار ارائه می دهند. بعضی از زبانها از چندین روش برای مدیریت حافظه استفاده می كنند و حتی بعضی از آنها به توسعه دهنده اجازه می دهند كه بهترین گزینه را برای خود انتخاب كند (C ++ مثال خوبی است). رویکردها را می توان به صورت زیر دسته بندی کرد
🔴Manual memory management
🔴Garbage collection(GC)
🔴Resource Acquisition is Initialization (RAII)
🔴Automatic Reference Counting(ARC)
🔴Ownership
➖➖➖➖➖➖➖➖➖
🔰 @gopher_academy
Gopher Academy
🔴 مدیریت حافظه در زبان های برنامه نویسی مدرن 🟢Introduction to Memory management 🟡 https://t.me/gopher_academy/778 🟢What is it? 🟡 https://t.me/gopher_academy/779 🟢Stack 🟡 https://t.me/gopher_academy/780 🟢Stack & Heap visualized 🟡 https://t.me/gopher_academy/781…
🟢Manual memory management
🟡 این زبان به طور پیش فرض حافظه را برای شما مدیریت نمی کند ، این به شما بستگی دارد که برای اشیایی که ایجاد می کنید حافظه اختصاص داده و آن را آزاد کنید. به عنوان مثال C و C ++. آنها روش های malloc ، realloc ، calloc را برای مدیریت حافظه ارائه می دهند و این به خود توسعه دهنده بستگی دارد که حافظه heap را در برنامه اختصاص داده و از اشاره گرها برای مدیریت حافظه به طور کارآمد استفاده کند.
➖➖➖➖➖➖➖➖➖
🔰 @gopher_academy
🟡 این زبان به طور پیش فرض حافظه را برای شما مدیریت نمی کند ، این به شما بستگی دارد که برای اشیایی که ایجاد می کنید حافظه اختصاص داده و آن را آزاد کنید. به عنوان مثال C و C ++. آنها روش های malloc ، realloc ، calloc را برای مدیریت حافظه ارائه می دهند و این به خود توسعه دهنده بستگی دارد که حافظه heap را در برنامه اختصاص داده و از اشاره گرها برای مدیریت حافظه به طور کارآمد استفاده کند.
➖➖➖➖➖➖➖➖➖
🔰 @gopher_academy
Gopher Academy
🔴 مدیریت حافظه در زبان های برنامه نویسی مدرن 🟢Introduction to Memory management 🟡 https://t.me/gopher_academy/778 🟢What is it? 🟡 https://t.me/gopher_academy/779 🟢Stack 🟡 https://t.me/gopher_academy/780 🟢Stack & Heap visualized 🟡 https://t.me/gopher_academy/781…
🟢Garbage collection(GC)
🟡 مدیریت خودکار حافظه heap با آزادسازی حافظه های تخصیص یافته استفاده نشده. درواقعه GC یکی از رایج ترین مدیریت حافظه در زبان های مدرن است و این فرآیند اغلب در فواصل معینی اجرا می شود و بنابراین باعث ایجاد سربار جزئی به نام pause times . می شود.
🟡 برخی از زبانهایی زیر به طور پیش فرض از Garbage collection برای مدیریت حافظه استفاده می کنند.👇🏻
🔻JVM(Java/Scala/Groovy/Kotlin)
🔻JavaScript
🔻C#
🔻Golang
🔻OCaml
🔻Ruby
➖➖➖➖➖➖➖➖➖
🔰 @gopher_academy
🟡 مدیریت خودکار حافظه heap با آزادسازی حافظه های تخصیص یافته استفاده نشده. درواقعه GC یکی از رایج ترین مدیریت حافظه در زبان های مدرن است و این فرآیند اغلب در فواصل معینی اجرا می شود و بنابراین باعث ایجاد سربار جزئی به نام pause times . می شود.
🟡 برخی از زبانهایی زیر به طور پیش فرض از Garbage collection برای مدیریت حافظه استفاده می کنند.👇🏻
🔻JVM(Java/Scala/Groovy/Kotlin)
🔻JavaScript
🔻C#
🔻Golang
🔻OCaml
🔻Ruby
➖➖➖➖➖➖➖➖➖
🔰 @gopher_academy
Gopher Academy
🔴 مدیریت حافظه در زبان های برنامه نویسی مدرن 🟢Introduction to Memory management 🟡 https://t.me/gopher_academy/778 🟢What is it? 🟡 https://t.me/gopher_academy/779 🟢Stack 🟡 https://t.me/gopher_academy/780 🟢Stack & Heap visualized 🟡 https://t.me/gopher_academy/781…
This media is not supported in your browser
VIEW IN TELEGRAM
🟢Garbage collection visualized
🟡 به عکس فوق توجه کنبد - روند اجرای GCرا نشان میدهد- توضبحات در پست زیر
👇🏻👇🏻👇🏻👇🏻
https://t.me/gopher_academy/790
➖➖➖➖➖➖➖➖➖
🔰 @gopher_academy
🟡 به عکس فوق توجه کنبد - روند اجرای GCرا نشان میدهد- توضبحات در پست زیر
👇🏻👇🏻👇🏻👇🏻
https://t.me/gopher_academy/790
➖➖➖➖➖➖➖➖➖
🔰 @gopher_academy
https://t.me/gopher_academy/789
👆🏻👆🏻توضیحات عکس فوق👆🏻👆🏻
🟢Mark & Sweep GC:
🟡 به عنوان Tracing GC شناخته می شود. به طور کلی یک الگوریتم دو فاز است که ابتدا objects را که هنوز به عنوان "alive" ارجاع می شوند علامت گذاری می کند و در فاز بعدی حافظه objects را که زنده نیستند آزاد می کند. به عنوان مثال JVM ، C # ، Ruby ، JavaScript و Golang از این روش استفاده می کنند. در JVM الگوریتم های مختلف GC برای انتخاب وجود دارد در حالی که موتورهای جاوا اسکریپت مانند V8 از یک Mark & Sweep GC همراه با Reference counting GC برای تکمیل آن استفاده می کنند. این نوع GC به عنوان کتابخانه خارجی برای C & C ++ نیز موجود است.
🟢Reference counting GC:
🟡 هر شی object یک تعداد مرجع دریافت می کند که با تغییر ارجاع به آن افزایش یا کاهش می یابد و جمع آوری زباله زمانی انجام می شود که شمارش صفر شود. این خیلی ترجیح داده نمی شود زیرا نمی تواند منابع cyclic را اداره کند. به عنوان مثال PHP ، Perl و Python از این نوع GC با راه حل غلبه بر منابع چرخه ای استفاده می کنند. این نوع GC را می توان برای ++ C نیز فعال کرد.
➖➖➖➖➖➖➖➖➖
🔰 @gopher_academy
👆🏻👆🏻توضیحات عکس فوق👆🏻👆🏻
🟢Mark & Sweep GC:
🟡 به عنوان Tracing GC شناخته می شود. به طور کلی یک الگوریتم دو فاز است که ابتدا objects را که هنوز به عنوان "alive" ارجاع می شوند علامت گذاری می کند و در فاز بعدی حافظه objects را که زنده نیستند آزاد می کند. به عنوان مثال JVM ، C # ، Ruby ، JavaScript و Golang از این روش استفاده می کنند. در JVM الگوریتم های مختلف GC برای انتخاب وجود دارد در حالی که موتورهای جاوا اسکریپت مانند V8 از یک Mark & Sweep GC همراه با Reference counting GC برای تکمیل آن استفاده می کنند. این نوع GC به عنوان کتابخانه خارجی برای C & C ++ نیز موجود است.
🟢Reference counting GC:
🟡 هر شی object یک تعداد مرجع دریافت می کند که با تغییر ارجاع به آن افزایش یا کاهش می یابد و جمع آوری زباله زمانی انجام می شود که شمارش صفر شود. این خیلی ترجیح داده نمی شود زیرا نمی تواند منابع cyclic را اداره کند. به عنوان مثال PHP ، Perl و Python از این نوع GC با راه حل غلبه بر منابع چرخه ای استفاده می کنند. این نوع GC را می توان برای ++ C نیز فعال کرد.
➖➖➖➖➖➖➖➖➖
🔰 @gopher_academy
Gopher Academy
🔴 مدیریت حافظه در زبان های برنامه نویسی مدرن 🟢Introduction to Memory management 🟡 https://t.me/gopher_academy/778 🟢What is it? 🟡 https://t.me/gopher_academy/779 🟢Stack 🟡 https://t.me/gopher_academy/780 🟢Stack & Heap visualized 🟡 https://t.me/gopher_academy/781…
🟢Resource Acquisition is Initialization (RAII)
🟡 در این نوع مدیریت حافظه ، تخصیص حافظه یک شی به طول عمر آن پیوند خورده است که از زمان ساخت تا نابودی است. این در C ++ معرفی شد و همچنین توسط Ada و Rust استفاده می شود.
➖➖➖➖➖➖➖➖➖
🔰 @gopher_academy
🟡 در این نوع مدیریت حافظه ، تخصیص حافظه یک شی به طول عمر آن پیوند خورده است که از زمان ساخت تا نابودی است. این در C ++ معرفی شد و همچنین توسط Ada و Rust استفاده می شود.
➖➖➖➖➖➖➖➖➖
🔰 @gopher_academy
Gopher Academy
🔴 مدیریت حافظه در زبان های برنامه نویسی مدرن 🟢Introduction to Memory management 🟡 https://t.me/gopher_academy/778 🟢What is it? 🟡 https://t.me/gopher_academy/779 🟢Stack 🟡 https://t.me/gopher_academy/780 🟢Stack & Heap visualized 🟡 https://t.me/gopher_academy/781…
🟢Automatic Reference Counting(ARC)
🟡 این روند شبیه Reference counting GC است اما به جای اجرای فرایند در یک بازه زمانی خاص ، دستورالعمل های نگهداری را در زمان کامپایل به کد کامپایل شده وارد می شوند و وقتی یک مرجع شی صفر می شود به عنوان بخشی از اجرا بدون مکث برنامه پاک می شود . همچنین نمی تواند از منابع دوره ای استفاده کند و برای استفاده از آن با استفاده از کلمات کلیدی خاص به توسعه دهنده متکی است.
➖➖➖➖➖➖➖➖➖
🔰 @gopher_academy
🟡 این روند شبیه Reference counting GC است اما به جای اجرای فرایند در یک بازه زمانی خاص ، دستورالعمل های نگهداری را در زمان کامپایل به کد کامپایل شده وارد می شوند و وقتی یک مرجع شی صفر می شود به عنوان بخشی از اجرا بدون مکث برنامه پاک می شود . همچنین نمی تواند از منابع دوره ای استفاده کند و برای استفاده از آن با استفاده از کلمات کلیدی خاص به توسعه دهنده متکی است.
➖➖➖➖➖➖➖➖➖
🔰 @gopher_academy
❌ مدیریت حافظه در زبان های برنامه نویسی مدرن
❌(اتمام این قسمت) برای دسترسی کامل و سریع به این آموزش به لینک زیر مراجبع کنید
👇🏻👇🏻👇🏻
🟡https://t.me/gopher_academy/777
➖➖➖➖➖➖➖➖➖
🔰 @gopher_academy
❌(اتمام این قسمت) برای دسترسی کامل و سریع به این آموزش به لینک زیر مراجبع کنید
👇🏻👇🏻👇🏻
🟡https://t.me/gopher_academy/777
➖➖➖➖➖➖➖➖➖
🔰 @gopher_academy
🔴استخدام برنامهنویس GO (دورکاری)
🔴گروه نرم افزاری رازنامه | Raznameh Group
https://jobinja.ir/558878
➖➖➖➖➖➖➖➖➖
🔰 @gopher_academy
🔴گروه نرم افزاری رازنامه | Raznameh Group
https://jobinja.ir/558878
➖➖➖➖➖➖➖➖➖
🔰 @gopher_academy
🔴 درگاه پرداخت idpay با گولنگ و مانگو
🟡 https://github.com/mrbardia72/dark-idpay
🔴 درگاه پرداخت zarinpal با گولنگ و مانگو
🟡 https://github.com/mrbardia72/dark-zarinpal
🔵 این ریپو رو خودم دورس کردم - دوستان اگه پیشنهادی برای بهتر شدن یا آبشنی که بخواد اضافه بشه میتونن مشارکت کنن pull request بزنن
➖➖➖➖➖➖➖➖➖
🔰 @gopher_academy
🟡 https://github.com/mrbardia72/dark-idpay
🔴 درگاه پرداخت zarinpal با گولنگ و مانگو
🟡 https://github.com/mrbardia72/dark-zarinpal
🔵 این ریپو رو خودم دورس کردم - دوستان اگه پیشنهادی برای بهتر شدن یا آبشنی که بخواد اضافه بشه میتونن مشارکت کنن pull request بزنن
➖➖➖➖➖➖➖➖➖
🔰 @gopher_academy
Gopher Academy pinned «❌ مدیریت حافظه در زبان های برنامه نویسی مدرن ❌(اتمام این قسمت) برای دسترسی کامل و سریع به این آموزش به لینک زیر مراجبع کنید 👇🏻👇🏻👇🏻 🟡https://t.me/gopher_academy/777 ➖➖➖➖➖➖➖➖➖ 🔰 @gopher_academy»