JavaScriptda Garbage Collection
Josh*Assalaamu Alaykum.
Demak bugungi maqolamiz sezganingizdek Garbage collection haqida bo'ladi.
Bu mavzu ayrimlarga uncha qiziq emasdur, ammo JS ni mukammal tushunmoqchi bo'lganlarga albatta qiziq.
Bismillah.
Boshladik. 😉
Biz JavaScriptda kod yozayotganimizda, turli xil o'zgaruvchilar, funksyalar yaratamiz va ishlatamiz. Ular hammasi xotiradan joy olishini bilarmidingiz ? Xo'sh agar ular hammasi xotiradan joy olsa , biz ishlatgan o'zgaruvchilar boshqa bizga keraki bo'lmay qolsachi ? Xotirani "axlat"lar bilan to'ldirib tashlaymizmi ?
Huddi telefonimizda keraksiz narsalar ko'payib ketsa biz ularni tozalab tashlaganimizdek, JS da ham bizga keraki yo'q bo'lgan narsalarni xotiradan o'chirish mexanizmi bor. U mexanizm avtomatik ravishda xotirani boshqarib turadi va kodda keraksiz bo'lgan barcha "axlat"larni xotiradan o'chirib tashlaydi.
Uning nomi "Garbage collector".
Demak biroz chuqurroqqa sho'ng'iymiz.
Biz yaratgan har bir o'zgaruvchi xotiradan joy oladi. Misol uchun:
let x = "Some value";
quyidagi kod xotiraga "Some value" qiymatini uning o'z ID raqami bilan yozib qo'yadi. ID raqami tahminan bunday ko'rinishda : "0012AAAWH05".
'x' esa u ID raqamga biriktirilib qo'yiladi. Qachonki biz 'x' ni kodimizda ishlatsak, u bizga xotirada biriktirilgan ID raqami saqlab turgan "Some value" ni qaytaradi. Demak xotira tahmiman qanday ishlashini tushundik.
Endi agar Garbage collector bizga 'x' keragi yo'qligini bilsa, uni shu zahoti xotiradan o'chirib tashlaydi.
Savol , Garbage collector 'x' ni bizga keragi yo'qligini qanday biladi ?
Reachability
Agar , kodimizda "Some value" ga olib boradigan qandaydir yo'l bo'lsa u qiymat "Reachable" qiymat hisoblanadi. Ya'ni u qiymatni xotiradan olish imkoni bor. Misol uchun , tepadagi kodda, x orqali biz xotiradagi "Some value" ni olyapmiz. Agar, kodimizda "Some value" ga yetishimizga hech qanday yo'l yo'q bo'lsa, bu xolda "Some value" "Unreachable(yetishib bo'lmas)" bo'ladi va uni Garbage Collector "axlat" sifatida ko'radi va xotiradan u qiymatni o'chirib tashlaydi.
Garbage collector juda ham ko'p joylarda ishlaydi va xotirani boshqarib turadi. Biz hozir faqat bitta misol ko'rdik. Ammo misollar ko'p. Keling ayrimlari bilan tanishamiz.
Quyidagi rasmdagi object ga e'tibor bering:

Endi , savol object ichidagi title ga yetishishni yo'llari qanday ?
Bizda hozircha yagona yechim bu, user.stories[0].content.title
Agar , biz quyidagi kodni yozsakchi, delete user.stories[0].content;
Bu holatda content va uni ichidagilari "unreachable" bo'lib, ular ham Garbage collector tomonidan xotiradan tozalab tashlanadi. Chunki, endi xotiradagi u qiymatlarga kodimizda yetib borishni iloji yo'q. Garbage collector esa ayni damda bizga juda katta yordam beradi. (Bu uchun rahmat 😉).
Bu kabi misollar talaygina, Garbage collector ham ko'pgina joylarda bizga xotirani avtomatik ravishda tozalab, yordamlashib turadi.
Garbage collector haqida to'liq ma'lumotni google amakidan so'rab topishingiz mumkin 😹.
Biror tushunmovchiliklar bo'lsa kommentga qoldiring.
E'tiboringiz uchun rahmat.