Asosiy farq – Chiqindilarni yigʻuvchi va Destruktor
Koʻpchilik dasturlash tillari obyektga yoʻn altirilgan dasturlashni qoʻllab-quvvatlaydi. Bu ob'ektlardan foydalangan holda dastur yoki dasturiy ta'minotni yaratish metodologiyasi. Ob'ekt sinf yordamida yaratilgan, shuning uchun u sinfning namunasidir. Sinf ob'ekt nimadan iborat bo'lishi kerakligini tavsiflaydi. Ob'ektlarni yaratishda ob'ektlar uchun xotira ajratiladi. Ajratilgan xotira dasturning bajarilishi oxirida ushbu xotirani boshqa ob'ekt uchun qayta ishlatish uchun bo'shatish kerak. Java va C. NET kabi dasturlash tillari xotirani boshqarish uchun axlat yig'uvchilardan foydalanadi, C va C++ kabi tillar esa dasturchidan xotirani boshqarishni talab qiladi. Kerakli hajmdagi xotira ajratilishi kerak va bajarilish oxirida xotirani bo'shatish kerak. Xotirani bo'shatish uchun axlat yig'uvchi va destruktor ishlatiladi. Axlat yig'uvchi va destruktor o'rtasidagi asosiy farq shundaki, axlat yig'uvchi avtomatik xotira boshqaruvini amalga oshiradigan dasturiy ta'minot, destruktor esa ob'ektni yo'q qilish paytida axlat yig'uvchi tomonidan chaqiriladigan maxsus usuldir.
Axlat yig'uvchi nima?
Ba'zi dasturlash tillarida boshqariladigan kod muhitlari mavjud. Java va C dasturlash tillarida xotirani avtomatik boshqarish amalga oshiriladi. Dasturchiga ob'ektlar tomonidan ishlatiladigan xotirani bo'shatish kerak emas. Ular uchun hatto murakkab tizimlarni ishlab chiqish osonroq, chunki xotirani boshqarish avtomatik ravishda amalga oshiriladi. C, C++ va Objective C kabi dasturlash tillarida dastur ob'ektlar xotirasini tizimga qaytarishi kerak. Java va C kabi tillar endi ishlatilmaydigan ob'ektlarni aniqlay oladi. Shundan so'ng ular ushbu ob'ektlar uchun ajratilgan xotirani tizimga qaytaradilar.
C va Java dasturlash tillarida Student deb nomlangan sinf mavjud boʻlsa, u holda Student s=new Student () yordamida obyekt yaratish mumkin; "Yangi" talaba sinfining namunasini yaratish uchun ishlatiladi. Tizimda xotirani ajratadi. "S" ushbu ob'ekt uchun ajratilgan xotira blokiga ishora qiladi. Til muhitlari ob'ektlardan foydalaniladimi yoki yo'qligini aniqlaydi. Agar ular keyinchalik ishlatilmasa, xotira chiqariladi va keyinroq foydalanish mumkin.
01-rasm: Chiqindilarni yigʻuvchi va yoʻq qiluvchi
Dasturni ishga tushirishda xotira bloklari tizim xotirasi pulidan ajratiladi. Keyin dastur shu xotira yordamida vazifalarni bajaradi. Dasturni bajarish tugagach, axlat yig'uvchi dastur uchun ajratilgan xotira bloklari muhim yoki muhim emasligini aniqlaydi. Agar ular talab qilinmasa, ushbu xotira bloklari tizimga qaytariladi. Shunday qilib, axlat yig'uvchi dasturda yaratilgan ob'ektlarni kuzatishi mumkin. Endi talab qilinmaydigan xotira bloklari tizim xotirasi puliga qaytariladi. Ushbu jarayonning asosiy afzalligi dasturchi xotirani ajratishga e'tibor qaratishi shart emasligini tasdiqlashdir. U unumdorlik va xotiradan foydalanishni muvozanatlashtiradi.
Destruktor nima?
Destruktor - bu sinfning maxsus a'zo funksiyasi. Ob'ekt doiradan chiqib ketganda, u chaqiriladi. Ob'ekt funksiya tugashi yoki dasturning bajarilishi oxirida yo'q qilinishi mumkin. Destruktor sinf nomi bilan bir xil nomga ega. Ob'ektni yaratish uchun konstruktor ishlatiladi. U parametrlarni qabul qilishi mumkin. Konstruktor qaytish qiymatlariga ham ega bo'lishi mumkin. Ammo Destruktorda qaytarish turi yoki qabul qiluvchi parametrlar mavjud emas. Sinf faqat bitta destruktordan iborat bo'lishi mumkin. Destruktor tilda belgisi yordamida ishora qilinadi. Agar sinf nomi Student boʻlsa, destruktor ~Student () {}.
Axlat yig'uvchi endi kerak bo'lmagan narsalarni qidiradi. Bu dastur tomonidan foydalanilmayotgan ob'ektlarni yo'q qilishni ta'minlaydi. U xotirani bo'shatish va resurslarni taqsimlash uchun destruktorni chaqiradi. Destruktorlar xotirani bo'shatish, fayllarni yopish, tarmoq resurslarini chiqarish va ma'lumotlar bazasi ulanishlarini yopish uchun foydalidir. Ko'pgina dasturlash tillarida destruktorni yozish shart emas, chunki axlat yig'uvchi standart konstruktorni o'zi chaqiradi. Agar dasturchi C++ kabi tildagi koʻrsatkichlar yordamida har qanday dinamik xotira taqsimotini amalga oshirgan boʻlsa, u holda obʼyekt yoʻq qilinishidan oldin xotirani boʻshatish uchun destruktor yozishi kerak.
Axlat yigʻuvchi va destruktor oʻrtasidagi oʻxshashlik nimada?
Garbage Collector ham, Destruktor ham dastur uchun kerak boʻlmagan xotirani chiqarish uchun ishlatiladi
Axlat yigʻuvchi va destruktor oʻrtasidagi farq nima?
Garbage Collector vs Destructor |
|
Axlat yigʻuvchi - bu xotirani avtomatik boshqarishni amalga oshiradigan dastur. | Destruktor - bu ob'ektni yo'q qilish paytida axlat yig'uvchi tomonidan chaqiriladigan maxsus usul. |
Tur | |
Axlat yigʻuvchi dastur hisoblanadi. | Destruktor - bu usul. |
Xulosa – Axlat yigʻuvchi va Destruktor
Axlat yig'uvchi va destruktor xotirani bo'shatish bilan bog'liq ikkita atamadir. Ushbu maqolada axlat yig'uvchi va destruktor o'rtasidagi farq muhokama qilindi. Axlat yig'uvchi va destruktor o'rtasidagi farq shundaki, axlat yig'uvchi avtomatik xotira boshqaruvini amalga oshiradigan dasturiy ta'minot, destruktor esa ob'ektni yo'q qilish paytida axlat yig'uvchi tomonidan chaqiriladigan maxsus usul.
Grabage Collector va Destructor-ning PDF-faylini yuklab oling
Siz ushbu maqolaning PDF-versiyasini yuklab olishingiz va iqtibos keltirgan holda oflayn maqsadlarda foydalanishingiz mumkin. Iltimos, PDF versiyasini bu yerdan yuklab oling: Axlat yig'uvchi va destruktor o'rtasidagi farq