ஜாவா மெய்நிகர் இயந்திரம் (JVM) குப்பை சேகரிப்பு சரிசெய்தல் பற்றிய இந்த விரிவான வழிகாட்டி மூலம் உங்கள் ஜாவா பயன்பாடுகளின் செயல்திறன் மற்றும் வளப் பயன்பாட்டை மேம்படுத்துங்கள்.
ஜாவா மெய்நிகர் இயந்திரம்: குப்பை சேகரிப்பு சரிசெய்தல் பற்றிய ஒரு ஆழமான பார்வை
ஜாவாவின் சக்தி அதன் இயங்குதள சார்பற்ற தன்மையில் உள்ளது, இது ஜாவா மெய்நிகர் இயந்திரம் (JVM) மூலம் அடையப்படுகிறது. JVM-ன் ஒரு முக்கிய அம்சம் அதன் தானியங்கி நினைவக மேலாண்மை ஆகும், இது முதன்மையாக குப்பை சேகரிப்பான் (GC) மூலம் கையாளப்படுகிறது. GC-ஐப் புரிந்துகொண்டு சரிசெய்வது, உகந்த பயன்பாட்டு செயல்திறனுக்கு முக்கியமானது, குறிப்பாக பல்வேறு பணிச்சுமைகள் மற்றும் பெரிய தரவுத்தொகுப்புகளைக் கையாளும் உலகளாவிய பயன்பாடுகளுக்கு இது அவசியம். இந்த வழிகாட்டி GC சரிசெய்தல் பற்றிய ஒரு விரிவான கண்ணோட்டத்தை வழங்குகிறது, இதில் வெவ்வேறு குப்பை சேகரிப்பான்கள், சரிசெய்தல் அளவுருக்கள் மற்றும் உங்கள் ஜாவா பயன்பாடுகளை மேம்படுத்த உதவும் நடைமுறை எடுத்துக்காட்டுகள் ஆகியவை அடங்கும்.
ஜாவாவில் குப்பை சேகரிப்பைப் புரிந்துகொள்ளுதல்
குப்பை சேகரிப்பு என்பது ஒரு நிரலால் இனி பயன்படுத்தப்படாத பொருட்களால் ஆக்கிரமிக்கப்பட்ட நினைவகத்தைத் தானாகவே மீட்டெடுக்கும் செயல்முறையாகும். இது நினைவகக் கசிவுகளைத் தடுக்கிறது மற்றும் டெவலப்பர்களை கைமுறை நினைவக மேலாண்மையிலிருந்து விடுவிப்பதன் மூலம் மேம்பாட்டை எளிதாக்குகிறது, இது C மற்றும் C++ போன்ற மொழிகளுடன் ஒப்பிடும்போது ஒரு குறிப்பிடத்தக்க நன்மையாகும். JVM-ன் GC இந்த பயன்படுத்தப்படாத பொருட்களைக் கண்டறிந்து நீக்குகிறது, எதிர்கால பொருள் உருவாக்கத்திற்கு நினைவகத்தைக் கிடைக்கச் செய்கிறது. குப்பை சேகரிப்பானின் தேர்வு மற்றும் அதன் சரிசெய்தல் அளவுருக்கள் பயன்பாட்டு செயல்திறனை ஆழமாகப் பாதிக்கின்றன, அவற்றுள்:
- பயன்பாட்டு இடைநிறுத்தங்கள் (Application Pauses): GC இடைநிறுத்தங்கள், 'stop-the-world' நிகழ்வுகள் என்றும் அழைக்கப்படுகின்றன, இங்கு GC இயங்கும்போது பயன்பாட்டுத் திரிக்கள் (threads) தற்காலிகமாக நிறுத்தப்படுகின்றன. அடிக்கடி அல்லது நீண்ட இடைநிறுத்தங்கள் பயனர் அனுபவத்தை கணிசமாக பாதிக்கலாம்.
- செயல்திறன் (Throughput): பயன்பாடு பணிகளைச் செயல்படுத்தக்கூடிய விகிதம். GC, உண்மையான பயன்பாட்டு வேலைக்கு பயன்படுத்தக்கூடிய CPU வளங்களின் ஒரு பகுதியை உட்கொள்ளக்கூடும், இதனால் செயல்திறன் பாதிக்கப்படும்.
- நினைவகப் பயன்பாடு (Memory Utilization): பயன்பாடு கிடைக்கும் நினைவகத்தை எவ்வளவு திறமையாகப் பயன்படுத்துகிறது. மோசமாக உள்ளமைக்கப்பட்ட GC அதிகப்படியான நினைவகப் பயன்பாட்டிற்கும், நினைவகம் போதாமைப் பிழைகளுக்கும் (out-of-memory errors) வழிவகுக்கும்.
- செயற்பாட்டு நேரம் (Latency): ஒரு கோரிக்கைக்குப் பதிலளிக்க பயன்பாட்டிற்கு ஆகும் நேரம். 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)
-Xms
(குறைந்தபட்ச ஹீப் அளவு): ஆரம்ப ஹீப் அளவை அமைக்கிறது. இயங்கும் நேரத்தில் JVM ஹீப்பின் அளவை மாற்றுவதைத் தடுக்க, இதை-Xmx
மதிப்பிற்கு சமமாக அமைப்பது பொதுவாக ஒரு நல்ல நடைமுறையாகும்.-Xmx
(அதிகபட்ச ஹீப் அளவு): அதிகபட்ச ஹீப் அளவை அமைக்கிறது. இது கட்டமைக்க வேண்டிய மிக முக்கியமான அளவுருவாகும். சரியான மதிப்பைக் கண்டறிவது சோதனை மற்றும் கண்காணிப்பை உள்ளடக்கியது. ஒரு பெரிய ஹீப் செயல்திறனை மேம்படுத்தக்கூடும், ஆனால் GC கடினமாக உழைக்க வேண்டியிருந்தால் இடைநிறுத்த நேரங்களை அதிகரிக்கக்கூடும்.-Xmn
(இளம் தலைமுறை அளவு): இளம் தலைமுறையின் அளவைக் குறிப்பிடுகிறது. இளம் தலைமுறை என்பது புதிய பொருள்கள் ஆரம்பத்தில் ஒதுக்கப்படும் இடம். ஒரு பெரிய இளம் தலைமுறை சிறிய GC-களின் அதிர்வெண்ணைக் குறைக்க முடியும். G1GC-க்கு, இளம் தலைமுறையின் அளவு தானாக நிர்வகிக்கப்படுகிறது, ஆனால்-XX:G1NewSizePercent
மற்றும்-XX:G1MaxNewSizePercent
அளவுருக்களைப் பயன்படுத்தி சரிசெய்யலாம்.
2. குப்பை சேகரிப்பான் தேர்வு
-XX:+UseSerialGC
: சீரியல் GC-ஐ இயக்குகிறது.-XX:+UseParallelGC
: இணை GC (செயல்திறன் சேகரிப்பான்) இயக்குகிறது.-XX:+UseG1GC
: G1GC-ஐ இயக்குகிறது. இது ஜாவா 9 மற்றும் அதற்குப் பிந்தைய பதிப்புகளுக்கு இயல்புநிலையாகும்.-XX:+UseZGC
: ZGC-ஐ இயக்குகிறது.-XX:+UseShenandoahGC
: ஷெனந்தோவா GC-ஐ இயக்குகிறது.
3. G1GC-குறிப்பிட்ட அளவுருக்கள்
-XX:MaxGCPauseMillis=
: G1GC-க்கான இலக்கு அதிகபட்ச இடைநிறுத்த நேரத்தை மில்லி விநாடிகளில் அமைக்கிறது. GC இந்த இலக்கை அடைய முயற்சிக்கும், ஆனால் அது ஒரு உத்தரவாதம் அல்ல.-XX:G1HeapRegionSize=
: G1GC-க்கு ஹீப்பிற்குள் உள்ள பகுதிகளின் அளவை அமைக்கிறது. பகுதி அளவை அதிகரிப்பது GC மேல்நிலைச் செலவைக் குறைக்கக்கூடும்.-XX:G1NewSizePercent=
: G1GC-ல் இளம் தலைமுறைக்கு பயன்படுத்தப்படும் ஹீப்பின் குறைந்தபட்ச சதவீதத்தை அமைக்கிறது.-XX:G1MaxNewSizePercent=
: G1GC-ல் இளம் தலைமுறைக்கு பயன்படுத்தப்படும் ஹீப்பின் அதிகபட்ச சதவீதத்தை அமைக்கிறது.-XX:G1ReservePercent=
: புதிய பொருட்களை ஒதுக்குவதற்காக ஒதுக்கப்பட்ட நினைவகத்தின் அளவு. இயல்புநிலை மதிப்பு 10% ஆகும்.-XX:G1MixedGCCountTarget=
: ஒரு சுழற்சியில் கலப்பு குப்பை சேகரிப்புகளின் இலக்கு எண்ணிக்கையைக் குறிப்பிடுகிறது.
4. ZGC-குறிப்பிட்ட அளவுருக்கள்
-XX:ZUncommitDelay=
: இயக்க முறைமைக்கு நினைவகத்தை விடுவிக்கும் முன் ZGC காத்திருக்கும் நேரம், விநாடிகளில்.-XX:ZAllocationSpikeFactor=
: ஒதுக்கீட்டு விகிதத்திற்கான ஸ்பைக் காரணி. அதிக மதிப்பு, குப்பைகளை சேகரிக்க GC மேலும் தீவிரமாக வேலை செய்ய அனுமதிக்கப்படுகிறது மற்றும் அதிக CPU சுழற்சிகளை உட்கொள்ள முடியும் என்பதைக் குறிக்கிறது.
5. பிற முக்கிய அளவுருக்கள்
-XX:+PrintGCDetails
: விரிவான GC பதிவிடுதலை இயக்குகிறது, GC சுழற்சிகள், இடைநிறுத்த நேரங்கள் மற்றும் நினைவகப் பயன்பாடு பற்றிய மதிப்புமிக்க தகவல்களை வழங்குகிறது. இது GC நடத்தையைப் பகுப்பாய்வு செய்வதற்கு முக்கியமானது.-XX:+PrintGCTimeStamps
: GC பதிவு வெளியீட்டில் நேர முத்திரைகளைச் சேர்க்கிறது.-XX:+UseStringDeduplication
(ஜாவா 8u20 மற்றும் அதற்குப் பிறகு, G1GC): ஹீப்பில் ஒரே மாதிரியான சரங்களை நகல் நீக்குவதன் மூலம் நினைவகப் பயன்பாட்டைக் குறைக்கிறது.-XX:+ExplicitGCInvokesConcurrentAndUnloadsClasses
: தற்போதைய JDK-ல் வெளிப்படையான GC அழைப்புகளின் பயன்பாட்டை இயக்கவும் அல்லது முடக்கவும். இது உற்பத்தி சூழலில் செயல்திறன் சிதைவைத் தடுக்க பயனுள்ளதாக இருக்கும்.-XX:+HeapDumpOnOutOfMemoryError
: ஒரு OutOfMemoryError ஏற்படும் போது ஒரு ஹீப் டம்பை உருவாக்குகிறது, இது நினைவகப் பயன்பாட்டின் விரிவான பகுப்பாய்வு மற்றும் நினைவகக் கசிவுகளை அடையாளம் காண அனுமதிக்கிறது.-XX:HeapDumpPath=
: ஹீப் டம்ப் கோப்பு எழுதப்பட வேண்டிய இடத்தைக் குறிப்பிடுகிறது.
நடைமுறை 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. பெரிய தரவுத்தொகுப்புகளுடன் கூடிய பயன்பாடுகள்
மிகப்பெரிய தரவுத்தொகுப்புகளைக் கையாளும் பயன்பாடுகளுக்கு, கவனமான பரிசீலனை தேவை. ஒரு பெரிய ஹீப் அளவைப் பயன்படுத்துவது அவசியமாக இருக்கலாம், மேலும் கண்காணிப்பு இன்னும் முக்கியத்துவம் பெறுகிறது. தரவுத்தொகுப்பு சிறியதாகவும், அதன் அளவு இளம் தலைமுறைக்கு நெருக்கமாகவும் இருந்தால், தரவு இளம் தலைமுறையிலும் தற்காலிகமாக சேமிக்கப்படலாம்.
பின்வரும் புள்ளிகளைக் கவனியுங்கள்:
- பொருள் ஒதுக்கீட்டு விகிதம் (Object Allocation Rate): உங்கள் பயன்பாடு அதிக எண்ணிக்கையிலான குறுகிய கால பொருட்களை உருவாக்கினால், இளம் தலைமுறை போதுமானதாக இருக்கலாம்.
- பொருள் ஆயுட்காலம் (Object Lifespan): பொருள்கள் நீண்ட காலம் வாழ முனைகின்றன என்றால், இளம் தலைமுறையிலிருந்து பழைய தலைமுறைக்கு பதவி உயர்வு விகிதத்தை நீங்கள் கண்காணிக்க வேண்டும்.
- நினைவகத் தடம் (Memory Footprint): பயன்பாடு நினைவக வரம்பிற்குட்பட்டதாகவும், நீங்கள் OutOfMemoryError விதிவிலக்குகளை எதிர்கொண்டால், பொருளின் அளவைக் குறைப்பது அல்லது அவற்றை குறுகிய காலமாக மாற்றுவது சிக்கலைத் தீர்க்கக்கூடும்.
ஒரு பெரிய தரவுத்தொகுப்பிற்கு, இளம் தலைமுறை மற்றும் பழைய தலைமுறை விகிதம் முக்கியமானது. குறைந்த இடைநிறுத்த நேரங்களை அடைய பின்வரும் எடுத்துக்காட்டைக் கவனியுங்கள்:
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 சரிசெய்தலுக்கான சிறந்த நடைமுறைகள்
- இயல்புநிலைகளுடன் தொடங்குங்கள்: JVM இயல்புநிலைகள் பெரும்பாலும் ஒரு நல்ல தொடக்கப் புள்ளியாகும். முன்கூட்டியே அதிகமாக சரிசெய்ய வேண்டாம்.
- உங்கள் பயன்பாட்டைப் புரிந்து கொள்ளுங்கள்: உங்கள் பயன்பாட்டின் பணிச்சுமை, பொருள் ஒதுக்கீட்டு முறைகள் மற்றும் நினைவகப் பயன்பாட்டுப் பண்புகளை அறிந்து கொள்ளுங்கள்.
- தயாரிப்பு போன்ற சூழல்களில் சோதிக்கவும்: செயல்திறன் தாக்கத்தை துல்லியமாக மதிப்பிடுவதற்கு உங்கள் தயாரிப்பு சூழலை நெருக்கமாக ஒத்திருக்கும் சூழல்களில் GC உள்ளமைவுகளை சோதிக்கவும்.
- தொடர்ந்து கண்காணிக்கவும்: GC நடத்தை மற்றும் பயன்பாட்டு செயல்திறனை தொடர்ந்து கண்காணிக்கவும். கவனிக்கப்பட்ட முடிவுகளின் அடிப்படையில் தேவைக்கேற்ப சரிசெய்தல் அளவுருக்களை சரிசெய்யவும்.
- மாறிகளைத் தனிமைப்படுத்தவும்: சரிசெய்யும்போது, ஒவ்வொரு மாற்றத்தின் தாக்கத்தையும் புரிந்துகொள்ள ஒரு நேரத்தில் ஒரு அளவுருவை மட்டுமே மாற்றவும்.
- முன்கூட்டிய மேம்படுத்தலைத் தவிர்க்கவும்: உறுதியான தரவு மற்றும் பகுப்பாய்வு இல்லாமல் உணரப்பட்ட ஒரு சிக்கலுக்கு மேம்படுத்த வேண்டாம்.
- குறியீடு மேம்படுத்தலைக் கருத்தில் கொள்ளுங்கள்: பொருள் உருவாக்கம் மற்றும் குப்பை சேகரிப்பு மேல்நிலைச் செலவைக் குறைக்க உங்கள் குறியீட்டை மேம்படுத்தவும். உதாரணமாக, முடிந்தவரை பொருட்களை மீண்டும் பயன்படுத்தவும்.
- புதுப்பித்த நிலையில் இருங்கள்: GC தொழில்நுட்பம் மற்றும் JVM புதுப்பிப்புகளில் சமீபத்திய முன்னேற்றங்கள் குறித்து அறிந்திருங்கள். புதிய JVM பதிப்புகள் பெரும்பாலும் குப்பை சேகரிப்பில் மேம்பாடுகளை உள்ளடக்குகின்றன.
- உங்கள் சரிசெய்தலை ஆவணப்படுத்துங்கள்: GC உள்ளமைவு, உங்கள் தேர்வுகளுக்குப் பின்னால் உள்ள காரணம் மற்றும் செயல்திறன் முடிவுகளை ஆவணப்படுத்துங்கள். இது எதிர்கால பராமரிப்பு மற்றும் சரிசெய்தலுக்கு உதவுகிறது.
முடிவுரை
குப்பை சேகரிப்பு சரிசெய்தல் ஜாவா பயன்பாட்டு செயல்திறன் மேம்படுத்தலின் ஒரு முக்கிய அம்சமாகும். வெவ்வேறு குப்பை சேகரிப்பான்கள், சரிசெய்தல் அளவுருக்கள் மற்றும் கண்காணிப்பு நுட்பங்களைப் புரிந்துகொள்வதன் மூலம், குறிப்பிட்ட செயல்திறன் தேவைகளைப் பூர்த்தி செய்ய உங்கள் பயன்பாடுகளை திறம்பட மேம்படுத்தலாம். GC சரிசெய்தல் ஒரு தொடர்ச்சியான செயல்முறை என்பதை நினைவில் கொள்ளுங்கள் மற்றும் உகந்த முடிவுகளை அடைய தொடர்ச்சியான கண்காணிப்பு மற்றும் பகுப்பாய்வு தேவைப்படுகிறது. இயல்புநிலைகளுடன் தொடங்குங்கள், உங்கள் பயன்பாட்டைப் புரிந்து கொள்ளுங்கள், மற்றும் உங்கள் தேவைகளுக்கு சிறந்த பொருத்தத்தைக் கண்டறிய வெவ்வேறு உள்ளமைவுகளுடன் பரிசோதனை செய்யுங்கள். சரியான உள்ளமைப்பு மற்றும் கண்காணிப்புடன், உங்கள் உலகளாவிய அணுகலைப் பொருட்படுத்தாமல், உங்கள் ஜாவா பயன்பாடுகள் திறமையாகவும் நம்பகத்தன்மையுடனும் செயல்படுவதை உறுதிசெய்யலாம்.