ஜாவாஸ்கிரிப்டில் நினைவகக் குவியல் (Memory Heap)

ஜாவாஸ்கிரிப்டில், பயன்பாடுகளின் திறமையான மற்றும் சீரான செயல்திறனை உறுதிசெய்வதற்கு நினைவக மேலாண்மை (memory management) முக்கியமானது. நினைவகக் குவியல் என்பது பொருள்கள் (objects), சரங்கள் (strings) மற்றும் closures சேமிக்கப்படும் நினைவகத்தில் உள்ள ஒரு பகுதியாகும். இது ஜாவாஸ்கிரிப்ட் இயந்திரத்தின் குப்பை சேகரிப்பானால் (garbage collector) நிர்வகிக்கப்படுகிறது.

நினைவகக் குவியல் என்றால் என்ன?

நினைவகக் குவியல் என்பது ஒரு நிரல் மாறுபட்ட அளவுகளில் தரவைச் சேமிக்கப் பயன்படுத்தக்கூடிய முன்பே ஒதுக்கப்பட்ட கணினி நினைவகத்தின் (pre-reserved computer memory) ஒரு பகுதியாகும். நிலையான (static) நினைவக ஒதுக்கீட்டிற்குப் பயன்படுத்தப்படும் ஸ்டாக்கைப் (stack) போலல்லாமல், குவியல் மாறும் (dynamic) நினைவக ஒதுக்கீட்டிற்குப் பயன்படுத்தப்படுகிறது.

நினைவகக் குவியல் எவ்வாறு செயல்படுகிறது

நீங்கள் ஜாவாஸ்கிரிப்டில் பொருள்கள் அல்லது மாறிகளை உருவாக்கும்போது, அவை நினைவகக் குவியலில் ஒதுக்கப்படுகின்றன. ஜாவாஸ்கிரிப்ட் இயந்திரத்தின் குப்பை சேகரிப்பான் இனி பயன்பாட்டில் இல்லாத நினைவகத்தைக் கண்டறிந்து மீட்க அவ்வப்போது குவியலை ஸ்கேன் செய்கிறது.

நினைவக ஒதுக்கீட்டிற்கு (Memory Allocation) ஒரு எடுத்துக்காட்டு

குவியலில் நினைவகம் எவ்வாறு ஒதுக்கப்படுகிறது என்பதை விளக்குவதற்கான ஒரு எடுத்துக்காட்டு இங்கே:

let obj = {
    name: "John",
    age: 30
};

let arr = [1, 2, 3, 4, 5];

இந்த எடுத்துக்காட்டில், obj என்ற பொருளும் arr என்ற வரிசையும் நினைவகக் குவியலில் ஒதுக்கப்பட்டுள்ளன.

குப்பை சேகரிப்பு (Garbage Collection)

நினைவகத்தை நிர்வகிக்க ஜாவாஸ்கிரிப்ட் தானியங்கி குப்பை சேகரிப்பு வழிமுறையைப் பயன்படுத்துகிறது. குப்பை சேகரிப்பான் இனி அடைய முடியாத (no longer reachable) பொருள்களைக் கண்டறிந்து அவற்றின் நினைவகத்தை மீட்கிறது (reclaims).

குப்பை சேகரிப்பிற்கு ஒரு எடுத்துக்காட்டு

பின்வரும் உதாரணத்தைக் கவனியுங்கள்:

function createUser() {
    let user = {
        name: "Alice",
        age: 25
    };
    return user;
}

let user1 = createUser();
let user2 = createUser();
user1 = null; // user1 ஆல் குறிப்பிடப்பட்ட பொருள் இப்போது குப்பை சேகரிப்பிற்குத் தகுதியானது

இந்த எடுத்துக்காட்டில், user1 ஆனது null ஆக அமைக்கப்பட்டால், அது குறிப்பிடும் பொருள் இனி அடைய முடியாததாக இருப்பதால் குப்பை சேகரிப்பிற்குத் தகுதியுடையதாகிறது.

நினைவக கசிவுகள் (Memory Leaks)

இனி தேவையில்லாத நினைவகம் வெளியிடப்படாதபோது (not released) நினைவக கசிவுகள் ஏற்படுகின்றன. பொருள்களுக்கான குறிப்புகள் தற்செயலாகத் தக்கவைக்கப்பட்டால் (retained) இது நிகழலாம்.

நினைவக கசிவுக்கு ஒரு எடுத்துக்காட்டு

நினைவக கசிவுக்கு ஒரு எடுத்துக்காட்டு இங்கே:

let arr = [];
function addElement() {
    arr.push(new Array(1000000).join('x'));
}

setInterval(addElement, 1000); // வரிசை தொடர்ந்து வளர்ந்து வருவதால் இது நினைவக கசிவை ஏற்படுத்தும்

இந்த எடுத்துக்காட்டில், arr வரிசை தொடர்ந்து வளர்கிறது, ஏனெனில் புதிய கூறுகள் அகற்றப்படாமல் தொடர்ந்து சேர்க்கப்படுகின்றன, இது நினைவக கசிவுக்கு வழிவகுக்கும்.

நினைவக மேலாண்மைக்கான சிறந்த நடைமுறைகள் (Best Practices)

  1. குளோபல் மாறிகளைத் தவிர்க்கவும்: நினைவக கசிவுகளின் அபாயத்தைக் குறைக்க குளோபல் மாறிகளின் பயன்பாட்டைக் குறைக்கவும்.
  2. let மற்றும் const ஐப் பயன்படுத்தவும்: மாறிகளின் நோக்கத்தைக் கட்டுப்படுத்த var ஐ விட let மற்றும் const ஐ விரும்புங்கள்.
  3. குறிப்புகளைச் சுத்தம் செய்யவும் (Clean Up References): இனி தேவையில்லாத குறிப்புகளை வெளிப்படையாக null என அமைக்கவும்.
  4. Closures ஐ புத்திசாலித்தனமாகப் பயன்படுத்தவும்: Closures வெளிப்புற மாறிகளுக்கான குறிப்புகளைத் தக்கவைக்க முடியும் என்பதால் அவற்றுடன் கவனமாக இருக்கவும்.

முடிவு

திறமையான குறியீட்டை எழுதுவதற்கு ஜாவாஸ்கிரிப்டில் நினைவகக் குவியல் எவ்வாறு செயல்படுகிறது என்பதைப் புரிந்துகொள்வது அவசியம். சிறந்த நடைமுறைகளைப் பின்பற்றுவதன் மூலமும், நினைவக ஒதுக்கீடு மற்றும் குப்பை சேகரிப்பு ஆகியவற்றைக் கவனத்தில் கொள்வதன் மூலமும், நினைவக கசிவுகள் போன்ற பொதுவான சிக்கல்களை நீங்கள் தவிர்க்கலாம்.

results matching ""

    No results matching ""