தமிழ்

நவீன இயங்குநேர அமைப்புகளுக்கு சக்தி தரும் அடிப்படைக் குப்பை சேகரிப்பு வழிமுறைகளை ஆராயுங்கள். இது உலகெங்கிலும் நினைவக மேலாண்மை மற்றும் செயலி செயல்திறனுக்கு இன்றியமையாதது.

இயங்குநேர அமைப்புகள்: குப்பை சேகரிப்பு வழிமுறைகளின் ஒரு ஆழமான பார்வை

கணினி உலகின் சிக்கலான சூழலில், இயங்குநேர அமைப்புகள் நமது மென்பொருட்களுக்கு உயிர் கொடுக்கும் கண்ணுக்குத் தெரியாத இயந்திரங்கள் ஆகும். அவை வளங்களை நிர்வகிக்கின்றன, குறியீட்டை இயக்குகின்றன, மேலும் செயலிகளின் சீரான செயல்பாட்டை உறுதி செய்கின்றன. பல நவீன இயங்குநேர அமைப்புகளின் மையத்தில் ஒரு முக்கிய கூறு உள்ளது: குப்பை சேகரிப்பு (Garbage Collection - GC). GC என்பது, செயலியால் இனி பயன்படுத்தப்படாத நினைவகத்தை தானாகவே மீட்டெடுக்கும் ஒரு செயல்முறையாகும். இது நினைவகக் கசிவுகளைத் தடுத்து, திறமையான வளப் பயன்பாட்டை உறுதி செய்கிறது.

உலகெங்கிலும் உள்ள டெவலப்பர்களுக்கு, GC-ஐப் புரிந்துகொள்வது என்பது சுத்தமான குறியீட்டை எழுதுவது மட்டுமல்ல; அது வலுவான, செயல்திறன் மிக்க மற்றும் அளவிடக்கூடிய செயலிகளை உருவாக்குவதாகும். இந்த விரிவான ஆய்வு, குப்பை சேகரிப்புக்கு ஆற்றல் அளிக்கும் முக்கிய கருத்துகள் மற்றும் பல்வேறு வழிமுறைகளை ஆழமாக ஆராயும். இது பல்வேறு தொழில்நுட்பப் பின்னணியில் உள்ள நிபுணர்களுக்கு மதிப்புமிக்க நுண்ணறிவுகளை வழங்கும்.

நினைவக மேலாண்மையின் கட்டாயம்

குறிப்பிட்ட வழிமுறைகளை ஆராய்வதற்கு முன்பு, நினைவக மேலாண்மை ஏன் இவ்வளவு முக்கியமானது என்பதைப் புரிந்துகொள்வது அவசியம். பாரம்பரிய நிரலாக்க முறைகளில், டெவலப்பர்கள் நினைவகத்தை கைமுறையாக ஒதுக்கி விடுவிக்கின்றனர். இது நுணுக்கமான கட்டுப்பாட்டை வழங்கினாலும், இது பிழைகளின் ஒரு மோசமான ஆதாரமாகவும் உள்ளது:

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

குப்பை சேகரிப்பில் உள்ள முக்கிய கருத்துகள்

அனைத்து குப்பை சேகரிப்பு வழிமுறைகளுக்கும் பல அடிப்படைக் கருத்துகள் அடிப்படையாக உள்ளன:

1. சென்றடையக்கூடிய தன்மை (Reachability)

பெரும்பாலான GC வழிமுறைகளின் அடிப்படைக் கொள்கை சென்றடையக்கூடிய தன்மை ஆகும். ஒரு பொருள், அறியப்பட்ட, "செயலில்" உள்ள மூலங்களின் தொகுப்பிலிருந்து அந்தப் பொருளுக்கு ஒரு பாதை இருந்தால், அது சென்றடையக்கூடியதாகக் கருதப்படுகிறது. மூலங்கள் பொதுவாக பின்வருவனவற்றை உள்ளடக்கும்:

இந்த மூலங்களிலிருந்து சென்றடைய முடியாத எந்தவொரு பொருளும் குப்பை எனக் கருதப்பட்டு மீட்டெடுக்கப்படலாம்.

2. குப்பை சேகரிப்பு சுழற்சி

ஒரு பொதுவான GC சுழற்சி பல கட்டங்களைக் கொண்டுள்ளது:

3. இடைநிறுத்தங்கள் (Pauses)

GC-யில் ஒரு குறிப்பிடத்தக்க சவால் உலகை நிறுத்தும் (stop-the-world - STW) இடைநிறுத்தங்கள் ஆகும். இந்த இடைநிறுத்தங்களின் போது, செயலியின் இயக்கம் நிறுத்தப்படுகிறது, இதனால் GC அதன் செயல்பாடுகளை குறுக்கீடு இல்லாமல் செய்ய முடியும். நீண்ட STW இடைநிறுத்தங்கள் செயலியின் மறுமொழித்திறனை கணிசமாக பாதிக்கலாம், இது எந்தவொரு உலகளாவிய சந்தையிலும் பயனர் எதிர்கொள்ளும் செயலிகளுக்கு ஒரு முக்கியமான கவலையாகும்.

முக்கிய குப்பை சேகரிப்பு வழிமுறைகள்

பல ஆண்டுகளாக, பல்வேறு GC வழிமுறைகள் உருவாக்கப்பட்டுள்ளன, ஒவ்வொன்றும் அதன் சொந்த பலம் மற்றும் பலவீனங்களைக் கொண்டுள்ளன. அவற்றில் மிகவும் பரவலான சிலவற்றை நாம் ஆராய்வோம்:

1. குறியிட்டு-துடைத்தல் (Mark-and-Sweep)

குறியிட்டு-துடைத்தல் வழிமுறை பழமையான மற்றும் மிகவும் அடிப்படையான GC நுட்பங்களில் ஒன்றாகும். இது இரண்டு தனித்தனி கட்டங்களில் செயல்படுகிறது:

நன்மைகள்:

குறைகள்:

உதாரணம்: ஜாவாவின் குப்பை சேகரிப்பாளரின் ஆரம்ப பதிப்புகள் ஒரு அடிப்படை குறியிட்டு-துடைத்தல் அணுகுமுறையைப் பயன்படுத்தின.

2. குறியிட்டு-சுருக்குதல் (Mark-and-Compact)

குறியிட்டு-துடைத்தலின் துண்டாக்க சிக்கலைக் கையாள, குறியிட்டு-சுருக்குதல் வழிமுறை மூன்றாவது கட்டத்தைச் சேர்க்கிறது:

நன்மைகள்:

குறைகள்:

உதாரணம்: இந்த அணுகுமுறை பல மேம்பட்ட சேகரிப்பாளர்களுக்கு அடித்தளமாக உள்ளது.

3. நகலெடுக்கும் குப்பை சேகரிப்பு (Copying Garbage Collection)

நகலெடுக்கும் GC நினைவகக் குவியலை இரண்டு இடங்களாகப் பிரிக்கிறது: இங்கிருந்து-இடம் (From-space) மற்றும் இங்கு-இடம் (To-space). பொதுவாக, புதிய பொருட்கள் இங்கிருந்து-இடத்தில் ஒதுக்கப்படுகின்றன.

நன்மைகள்:

குறைகள்:

உதாரணம்: தலைமுறை குப்பை சேகரிப்பாளர்களில் 'இளம்' தலைமுறையை சேகரிக்க அடிக்கடி பயன்படுத்தப்படுகிறது.

4. தலைமுறை குப்பை சேகரிப்பு (Generational Garbage Collection)

இந்த அணுகுமுறை தலைமுறை கருதுகோளை (generational hypothesis) அடிப்படையாகக் கொண்டது, இது பெரும்பாலான பொருட்கள் மிகக் குறுகிய ஆயுட்காலம் கொண்டவை என்று கூறுகிறது. தலைமுறை GC நினைவகக் குவியலை பல தலைமுறைகளாகப் பிரிக்கிறது:

அது எப்படி வேலை செய்கிறது:

  1. புதிய பொருட்கள் இளம் தலைமுறையில் ஒதுக்கப்படுகின்றன.
  2. சிறு GCகள் (பெரும்பாலும் நகலெடுக்கும் சேகரிப்பாளரைப் பயன்படுத்தி) இளம் தலைமுறையில் அடிக்கடி செய்யப்படுகின்றன. தப்பிப்பிழைக்கும் பொருட்கள் பழைய தலைமுறைக்கு உயர்த்தப்படுகின்றன.
  3. பெரிய GCகள் பழைய தலைமுறையில் குறைவாகவே செய்யப்படுகின்றன, பெரும்பாலும் குறியிட்டு-துடைத்தல் அல்லது குறியிட்டு-சுருக்குதல் முறையைப் பயன்படுத்தி.

நன்மைகள்:

குறைகள்:

உதாரணம்: ஜாவா மெய்நிகர் இயந்திரம் (JVM) தலைமுறை GC-ஐ விரிவாகப் பயன்படுத்துகிறது (எ.கா., Throughput Collector, CMS, G1, ZGC போன்ற சேகரிப்பாளர்களுடன்).

5. குறிப்பு எண்ணிக்கை (Reference Counting)

சென்றடையக்கூடிய தன்மையைக் கண்டறிவதற்குப் பதிலாக, குறிப்பு எண்ணிக்கை ஒவ்வொரு பொருளுடனும் ஒரு எண்ணிக்கையை இணைக்கிறது, இது எத்தனை குறிப்புகள் அதைக் குறிப்பிடுகின்றன என்பதைக் குறிக்கிறது. ஒரு பொருளின் குறிப்பு எண்ணிக்கை பூஜ்ஜியமாகக் குறையும்போது அது குப்பையாகக் கருதப்படுகிறது.

நன்மைகள்:

குறைகள்:

உதாரணம்: Swift (ARC - Automatic Reference Counting), Python, மற்றும் Objective-C ஆகியவற்றில் பயன்படுத்தப்படுகிறது.

6. படிப்படியான குப்பை சேகரிப்பு (Incremental Garbage Collection)

STW இடைநிறுத்த நேரங்களை மேலும் குறைக்க, படிப்படியான GC வழிமுறைகள் GC வேலையை சிறிய துண்டுகளாகச் செய்கின்றன, GC செயல்பாடுகளை செயலி இயக்கத்துடன் கலக்கின்றன. இது இடைநிறுத்த நேரங்களைக் குறைவாக வைத்திருக்க உதவுகிறது.

நன்மைகள்:

குறைகள்:

உதாரணம்: பழைய JVM பதிப்புகளில் உள்ள Concurrent Mark Sweep (CMS) சேகரிப்பாளர், படிப்படியான சேகரிப்பின் ஒரு ஆரம்ப முயற்சியாகும்.

7. ஒரேநேர குப்பை சேகரிப்பு (Concurrent Garbage Collection)

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

நன்மைகள்:

குறைகள்:

உதாரணம்: ஜாவாவில் G1, ZGC, மற்றும் Shenandoah போன்ற நவீன சேகரிப்பாளர்கள், மற்றும் Go மற்றும் .NET Core-ல் உள்ள GC ஆகியவை மிகவும் ஒரேநேரமானவை.

8. G1 (குப்பை-முதல்) சேகரிப்பாளர் (Garbage-First)

ஜாவா 7-ல் அறிமுகப்படுத்தப்பட்டு ஜாவா 9-ல் இயல்புநிலையாக மாறிய G1 சேகரிப்பாளர், ஒரு சர்வர்-பாணி, பகுதி-அடிப்படையிலான, தலைமுறை, மற்றும் ஒரேநேர சேகரிப்பாளர் ஆகும். இது செயல்திறன் மற்றும் தாமதத்தை சமநிலைப்படுத்த வடிவமைக்கப்பட்டுள்ளது.

நன்மைகள்:

குறைகள்:

உதாரணம்: பல நவீன ஜாவா செயலிகளின் இயல்புநிலை GC.

9. ZGC மற்றும் Shenandoah

இவை மிக சமீபத்திய, மேம்பட்ட குப்பை சேகரிப்பாளர்கள் ஆகும். இவை மிகக் குறைந்த இடைநிறுத்த நேரங்களுக்காக வடிவமைக்கப்பட்டுள்ளன, பெரும்பாலும் மிக பெரிய நினைவகக் குவியல்களில் (டெராபைட்கள்) கூட, துணை-மில்லி விநாடி இடைநிறுத்தங்களை இலக்காகக் கொண்டுள்ளன.

நன்மைகள்:

குறைகள்:

உதாரணம்: ZGC மற்றும் Shenandoah சமீபத்திய OpenJDK பதிப்புகளில் கிடைக்கின்றன மற்றும் நிதி வர்த்தக தளங்கள் அல்லது உலகளாவிய பார்வையாளர்களுக்கு சேவை செய்யும் பெரிய அளவிலான வலை சேவைகள் போன்ற தாமத-உணர்திறன் கொண்ட செயலிகளுக்கு ஏற்றவை.

வெவ்வேறு இயங்குநேர சூழல்களில் குப்பை சேகரிப்பு

கொள்கைகள் உலகளாவியதாக இருந்தாலும், GC-யின் செயலாக்கம் மற்றும் நுணுக்கங்கள் வெவ்வேறு இயங்குநேர சூழல்களில் வேறுபடுகின்றன:

சரியான GC வழிமுறையைத் தேர்ந்தெடுப்பது

பொருத்தமான GC வழிமுறையைத் தேர்ந்தெடுப்பது, செயலி செயல்திறன், அளவிடுதல் மற்றும் பயனர் அனுபவத்தைப் பாதிக்கும் ஒரு முக்கியமான முடிவாகும். அனைவருக்கும் பொருந்தக்கூடிய தீர்வு எதுவும் இல்லை. இந்த காரணிகளைக் கருத்தில் கொள்ளுங்கள்:

GC மேம்படுத்தலுக்கான நடைமுறை குறிப்புகள்

சரியான வழிமுறையைத் தேர்ந்தெடுப்பதைத் தாண்டி, நீங்கள் GC செயல்திறனை மேம்படுத்தலாம்:

குப்பை சேகரிப்பின் எதிர்காலம்

இன்னும் குறைந்த தாமதங்கள் மற்றும் அதிக செயல்திறனை நோக்கிய தேடல் தொடர்கிறது. எதிர்கால GC ஆராய்ச்சி மற்றும் மேம்பாடு இவற்றில் கவனம் செலுத்த வாய்ப்புள்ளது:

முடிவுரை

குப்பை சேகரிப்பு நவீன இயங்குநேர அமைப்புகளின் ஒரு மூலக்கல்லாகும், இது செயலிகள் சீராகவும் திறமையாகவும் இயங்குவதை உறுதிசெய்ய நினைவகத்தை அமைதியாக நிர்வகிக்கிறது. அடிப்படையான குறியிட்டு-துடைத்தல் முதல் மிகக் குறைந்த தாமதம் கொண்ட ZGC வரை, ஒவ்வொரு வழிமுறையும் நினைவக மேலாண்மையை மேம்படுத்துவதில் ஒரு பரிணாமப் படியைப் பிரதிபலிக்கிறது. உலகெங்கிலும் உள்ள டெவலப்பர்களுக்கு, இந்த நுட்பங்களைப் பற்றிய ஒரு திடமான புரிதல், மாறுபட்ட உலகளாவிய சூழல்களில் செழிக்கக்கூடிய, அதிக செயல்திறன் கொண்ட, அளவிடக்கூடிய மற்றும் நம்பகமான மென்பொருளை உருவாக்க அவர்களுக்கு அதிகாரம் அளிக்கிறது. சமரசங்களைப் புரிந்துகொண்டு சிறந்த நடைமுறைகளைப் பயன்படுத்துவதன் மூலம், அடுத்த தலைமுறை விதிவிலக்கான செயலிகளை உருவாக்க GC-யின் சக்தியை நாம் பயன்படுத்திக்கொள்ளலாம்.