தமிழ்

ஜாவா மெய்நிகர் இயந்திரம் (JVM) குப்பை சேகரிப்பு சரிசெய்தல் பற்றிய இந்த விரிவான வழிகாட்டி மூலம் உங்கள் ஜாவா பயன்பாடுகளின் செயல்திறன் மற்றும் வளப் பயன்பாட்டை மேம்படுத்துங்கள்.

ஜாவா மெய்நிகர் இயந்திரம்: குப்பை சேகரிப்பு சரிசெய்தல் பற்றிய ஒரு ஆழமான பார்வை

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

ஜாவாவில் குப்பை சேகரிப்பைப் புரிந்துகொள்ளுதல்

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

JVM-ல் உள்ள வெவ்வேறு குப்பை சேகரிப்பான்கள்

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

1. சீரியல் குப்பை சேகரிப்பான் (Serial Garbage Collector)

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

2. இணை குப்பை சேகரிப்பான் (Parallel Garbage Collector - Throughput Collector)

இணை GC, செயல்திறன் சேகரிப்பான் (throughput collector) என்றும் அழைக்கப்படுகிறது, இது பயன்பாட்டின் செயல்திறனை அதிகப்படுத்துவதை நோக்கமாகக் கொண்டுள்ளது. இது சிறிய மற்றும் பெரிய குப்பை சேகரிப்புகளைச் செய்ய பல திரிக்களைப் பயன்படுத்துகிறது, இது தனிப்பட்ட GC சுழற்சிகளின் கால அளவைக் குறைக்கிறது. குறைந்த செயல்பாட்டு நேரத்தை விட செயல்திறனை அதிகப்படுத்துவது மிகவும் முக்கியமான பயன்பாடுகளுக்கு இது ஒரு நல்ல தேர்வாகும், அதாவது தொகுதி செயலாக்கப் பணிகள் (batch processing jobs) போன்றவை.

3. CMS (Concurrent Mark Sweep) குப்பை சேகரிப்பான் (வழக்கற்றுப் போனது)

CMS, பயன்பாட்டுத் திரிக்களுடன் ஒரே நேரத்தில் குப்பை சேகரிப்பின் பெரும்பகுதியைச் செய்வதன் மூலம் இடைநிறுத்த நேரங்களைக் குறைப்பதற்காக வடிவமைக்கப்பட்டது. இது ஒரு ஒத்திசைவான குறி-துடைப்பு (concurrent mark-sweep) அணுகுமுறையைப் பயன்படுத்தியது. CMS, இணை GC-ஐ விட குறைவான இடைநிறுத்தங்களை வழங்கிய போதிலும், இது சிதறலால் (fragmentation) பாதிக்கப்படலாம் மற்றும் அதிக CPU பயன்பாட்டைக் கொண்டிருந்தது. CMS, ஜாவா 9 முதல் வழக்கற்றுப் போனதாக அறிவிக்கப்பட்டு, புதிய பயன்பாடுகளுக்குப் பரிந்துரைக்கப்படுவதில்லை. இது G1GC-ஆல் மாற்றப்பட்டுள்ளது.

4. G1GC (Garbage-First Garbage Collector)

G1GC ஜாவா 9 முதல் இயல்புநிலை குப்பை சேகரிப்பான் ஆகும், இது பெரிய ஹீப் அளவுகள் மற்றும் குறைந்த இடைநிறுத்த நேரங்கள் ஆகிய இரண்டிற்கும் வடிவமைக்கப்பட்டுள்ளது. இது ஹீப்பை பகுதிகளாகப் பிரித்து, குப்பைகளால் அதிகம் நிரம்பிய பகுதிகளை சேகரிப்பதற்கு முன்னுரிமை அளிக்கிறது, எனவே 'Garbage-First' என்ற பெயர் வந்தது. G1GC செயல்திறனுக்கும் செயல்பாட்டு நேரத்திற்கும் இடையில் ஒரு நல்ல சமநிலையை வழங்குகிறது, இது பரந்த அளவிலான பயன்பாடுகளுக்கு ஒரு பல்துறை தேர்வாக அமைகிறது. இது இடைநிறுத்த நேரங்களை ஒரு குறிப்பிட்ட இலக்கிற்குள் (எ.கா., 200 மில்லி விநாடிகள்) வைத்திருக்க முயல்கிறது.

5. ZGC (Z Garbage Collector)

ZGC என்பது ஜாவா 11-ல் அறிமுகப்படுத்தப்பட்ட குறைந்த செயல்பாட்டு நேர குப்பை சேகரிப்பான் ஆகும் (ஜாவா 11-ல் சோதனை முறையில், ஜாவா 15 முதல் தயாரிப்புக்குத் தயார்). இது ஹீப் அளவைப் பொருட்படுத்தாமல், GC இடைநிறுத்த நேரங்களை 10 மில்லி விநாடிகள் வரை குறைப்பதை நோக்கமாகக் கொண்டுள்ளது. ZGC ஒத்திசைவாக வேலை செய்கிறது, பயன்பாடு கிட்டத்தட்ட தடையின்றி இயங்குகிறது. அதிக அதிர்வெண் வர்த்தக அமைப்புகள் அல்லது ஆன்லைன் கேமிங் தளங்கள் போன்ற மிகக் குறைந்த செயல்பாட்டு நேரம் தேவைப்படும் பயன்பாடுகளுக்கு இது ஏற்றது. ZGC பொருள் குறிப்புகளைக் கண்காணிக்க நிறமிடப்பட்ட சுட்டிகளை (colored pointers) பயன்படுத்துகிறது.

6. ஷெனந்தோவா குப்பை சேகரிப்பான் (Shenandoah Garbage Collector)

ஷெனந்தோவா என்பது ரெட் ஹேட் நிறுவனத்தால் உருவாக்கப்பட்ட குறைந்த இடைநிறுத்த நேர குப்பை சேகரிப்பான் மற்றும் ZGC-க்கு ஒரு சாத்தியமான மாற்றாகும். இதுவும் ஒத்திசைவான குப்பை சேகரிப்பைச் செய்வதன் மூலம் மிகக் குறைந்த இடைநிறுத்த நேரங்களை நோக்கமாகக் கொண்டுள்ளது. ஷெனந்தோவாவின் முக்கிய வேறுபாடு என்னவென்றால், அது ஹீப்பை ஒத்திசைவாக சுருக்க முடியும் (compact), இது சிதறலைக் குறைக்க உதவும். ஷெனந்தோவா OpenJDK மற்றும் ஜாவாவின் ரெட் ஹேட் விநியோகங்களில் தயாரிப்புக்குத் தயாராக உள்ளது. இது அதன் குறைந்த இடைநிறுத்த நேரங்கள் மற்றும் செயல்திறன் பண்புகளுக்காக அறியப்படுகிறது. ஷெனந்தோவா பயன்பாட்டுடன் முழுமையாக ஒத்திசைவானது, இது எந்த நேரத்திலும் பயன்பாட்டின் செயல்பாட்டை நிறுத்தாமல் இருப்பதன் நன்மையைக் கொண்டுள்ளது. இந்த வேலை ஒரு கூடுதல் திரிக்கின் மூலம் செய்யப்படுகிறது.

முக்கிய GC சரிசெய்தல் அளவுருக்கள்

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

1. ஹீப் அளவு கட்டமைப்பு (Heap Size Configuration)

2. குப்பை சேகரிப்பான் தேர்வு

3. G1GC-குறிப்பிட்ட அளவுருக்கள்

4. ZGC-குறிப்பிட்ட அளவுருக்கள்

5. பிற முக்கிய அளவுருக்கள்

நடைமுறை GC சரிசெய்தல் எடுத்துக்காட்டுகள்

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

1. தொகுதி செயலாக்கப் பயன்பாடு (செயல்திறன் கவனம்)

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

java -Xms4g -Xmx4g -XX:+UseParallelGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -jar mybatchapp.jar

இந்த எடுத்துக்காட்டில், நாங்கள் குறைந்தபட்ச மற்றும் அதிகபட்ச ஹீப் அளவை 4GB ஆக அமைத்துள்ளோம், இணை GC-ஐ இயக்குகிறோம் மற்றும் விரிவான GC பதிவிடுதலை இயக்குகிறோம்.

2. வலைப் பயன்பாடு (செயல்பாட்டு நேர உணர்திறன்)

வலைப் பயன்பாடுகளுக்கு, ஒரு நல்ல பயனர் அனுபவத்திற்கு குறைந்த செயல்பாட்டு நேரம் முக்கியமானது. G1GC அல்லது ZGC (அல்லது ஷெனந்தோவா) பெரும்பாலும் விரும்பப்படுகிறது.

G1GC ஐப் பயன்படுத்துதல்:

java -Xms8g -Xmx8g -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -jar mywebapp.jar

இந்த கட்டமைப்பு குறைந்தபட்ச மற்றும் அதிகபட்ச ஹீப் அளவை 8GB ஆக அமைக்கிறது, G1GC-ஐ இயக்குகிறது, மற்றும் இலக்கு அதிகபட்ச இடைநிறுத்த நேரத்தை 200 மில்லி விநாடிகளாக அமைக்கிறது. உங்கள் செயல்திறன் தேவைகளின் அடிப்படையில் MaxGCPauseMillis மதிப்பைச் சரிசெய்யவும்.

ZGC ஐப் பயன்படுத்துதல் (ஜாவா 11+ தேவை):

java -Xms8g -Xmx8g -XX:+UseZGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -jar mywebapp.jar

இந்த எடுத்துக்காட்டு இதேபோன்ற ஹீப் உள்ளமைப்புடன் ZGC-ஐ இயக்குகிறது. ZGC மிகக் குறைந்த செயல்பாட்டு நேரத்திற்காக வடிவமைக்கப்பட்டுள்ளதால், நீங்கள் பொதுவாக ஒரு இடைநிறுத்த நேர இலக்கைக் கட்டமைக்கத் தேவையில்லை. குறிப்பிட்ட சூழ்நிலைகளுக்கு நீங்கள் அளவுருக்களைச் சேர்க்கலாம்; உதாரணமாக, உங்களுக்கு ஒதுக்கீட்டு விகிதச் சிக்கல்கள் இருந்தால், நீங்கள் -XX:ZAllocationSpikeFactor=2 ஐ முயற்சிக்கலாம்.

3. உயர் அதிர்வெண் வர்த்தக அமைப்பு (மிகக் குறைந்த செயல்பாட்டு நேரம்)

உயர் அதிர்வெண் வர்த்தக அமைப்புகளுக்கு, மிகக் குறைந்த செயல்பாட்டு நேரம் மிக முக்கியமானது. ZGC ஒரு சிறந்த தேர்வாகும், பயன்பாடு அதனுடன் இணக்கமாக உள்ளது என்று ধরেக்கொண்டால். நீங்கள் ஜாவா 8 ஐப் பயன்படுத்துகிறீர்கள் அல்லது இணக்கத்தன்மை சிக்கல்கள் இருந்தால், ஷெனந்தோவாவைக் கவனியுங்கள்.

java -Xms16g -Xmx16g -XX:+UseZGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -jar mytradingapp.jar

வலைப் பயன்பாட்டு எடுத்துக்காட்டைப் போலவே, நாங்கள் ஹீப் அளவை அமைத்து ZGC-ஐ இயக்குகிறோம். பணிச்சுமையை அடிப்படையாகக் கொண்டு ZGC குறிப்பிட்ட அளவுருக்களை மேலும் சரிசெய்வதைக் கருத்தில் கொள்ளுங்கள்.

4. பெரிய தரவுத்தொகுப்புகளுடன் கூடிய பயன்பாடுகள்

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

பின்வரும் புள்ளிகளைக் கவனியுங்கள்:

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

java -Xms32g -Xmx32g -XX:+UseG1GC -XX:MaxGCPauseMillis=100 -XX:G1NewSizePercent=20 -XX:G1MaxNewSizePercent=30 -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -jar mydatasetapp.jar

இந்த எடுத்துக்காட்டு ஒரு பெரிய ஹீப்பை (32GB) அமைக்கிறது, மற்றும் G1GC-ஐ குறைந்த இலக்கு இடைநிறுத்த நேரம் மற்றும் சரிசெய்யப்பட்ட இளம் தலைமுறை அளவுடன் நுட்பமாக சரிசெய்கிறது. அதற்கேற்ப அளவுருக்களைச் சரிசெய்யவும்.

கண்காணிப்பு மற்றும் பகுப்பாய்வு

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

1. GC பதிவிடுதல் (GC Logging)

-XX:+PrintGCDetails, -XX:+PrintGCTimeStamps, மற்றும் -Xloggc: போன்ற அளவுருக்களைப் பயன்படுத்தி விரிவான GC பதிவிடுதலை இயக்கவும். GC நடத்தை, இடைநிறுத்த நேரங்கள், GC சுழற்சிகளின் அதிர்வெண் மற்றும் நினைவகப் பயன்பாட்டு முறைகளைப் புரிந்துகொள்ள பதிவு கோப்புகளைப் பகுப்பாய்வு செய்யவும். GC பதிவுகளைக் காட்சிப்படுத்தவும் பகுப்பாய்வு செய்யவும் GCViewer அல்லது GCeasy போன்ற கருவிகளைப் பயன்படுத்துவதைக் கருத்தில் கொள்ளுங்கள்.

2. பயன்பாட்டு செயல்திறன் கண்காணிப்பு (APM) கருவிகள்

CPU பயன்பாடு, நினைவகப் பயன்பாடு, மறுமொழி நேரங்கள் மற்றும் பிழை விகிதங்கள் உள்ளிட்ட பயன்பாட்டு செயல்திறனைக் கண்காணிக்க APM கருவிகளை (எ.கா., Datadog, New Relic, AppDynamics) பயன்படுத்தவும். இந்த கருவிகள் GC தொடர்பான இடையூறுகளை அடையாளம் காணவும், பயன்பாட்டு நடத்தை குறித்த நுண்ணறிவுகளை வழங்கவும் உதவும். சந்தையில் உள்ள Prometheus மற்றும் Grafana போன்ற கருவிகளையும் நிகழ்நேர செயல்திறன் நுண்ணறிவுகளைக் காண பயன்படுத்தலாம்.

3. ஹீப் டம்ப்கள் (Heap Dumps)

OutOfMemoryErrors ஏற்படும் போது ஹீப் டம்ப்களை எடுக்கவும் (-XX:+HeapDumpOnOutOfMemoryError மற்றும் -XX:HeapDumpPath= ஐப் பயன்படுத்தி). நினைவகக் கசிவுகளை அடையாளம் காணவும், பொருள் ஒதுக்கீட்டு முறைகளைப் புரிந்துகொள்ளவும் Eclipse MAT (Memory Analyzer Tool) போன்ற கருவிகளைப் பயன்படுத்தி ஹீப் டம்ப்களைப் பகுப்பாய்வு செய்யவும். ஹீப் டம்ப்கள் ஒரு குறிப்பிட்ட நேரத்தில் பயன்பாட்டின் நினைவகப் பயன்பாட்டின் ஒரு ஸ்னாப்ஷாட்டை வழங்குகின்றன.

4. விவரக்குறிப்பு (Profiling)

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

GC சரிசெய்தலுக்கான சிறந்த நடைமுறைகள்

முடிவுரை

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