CodeGym/Java Course/தொகுதி 3/ஜேவிஎம்மில் நினைவகம், பகுதி 2

ஜேவிஎம்மில் நினைவகம், பகுதி 2

கிடைக்கப்பெறுகிறது

நினைவக வன்பொருள் கட்டமைப்பு

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

நவீன கணினியின் வன்பொருள் கட்டமைப்பின் எளிமைப்படுத்தப்பட்ட வரைபடம் இங்கே:

நினைவக வன்பொருள் கட்டமைப்பு

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

செயலி மையமானது அதன் நினைவகத்தில் (கோரின் உள்ளே) இருக்கும் பதிவேடுகளின் தொகுப்பைக் கொண்டுள்ளது. இது கணினியின் பிரதான நினைவகத்தில் (RAM) இருக்கும் தரவை விட மிக வேகமாக பதிவு தரவுகளில் செயல்பாடுகளை செய்கிறது. ஏனெனில் செயலி இந்த பதிவேடுகளை மிக வேகமாக அணுக முடியும்.

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

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

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

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

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

ஜாவா நினைவக மாதிரி மற்றும் நினைவக வன்பொருள் கட்டமைப்பை இணைத்தல்

ஏற்கனவே குறிப்பிட்டுள்ளபடி, ஜாவா நினைவக மாதிரி மற்றும் நினைவக வன்பொருள் கட்டமைப்பு வேறுபட்டது. வன்பொருள் கட்டமைப்பு நூல் அடுக்குகள் மற்றும் குவியல்களை வேறுபடுத்துவதில்லை. வன்பொருளில், நூல் அடுக்கு மற்றும் HEAP (குவியல்) பிரதான நினைவகத்தில் இருக்கும்.

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

நூல் அடுக்கு மற்றும் HEAP

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

  • பகிரப்பட்ட மாறிகளில் திரி செய்த மாற்றங்களின் தெரிவுநிலை.
  • பகிரப்பட்ட மாறிகளைப் படிக்கும்போது, ​​சரிபார்க்கும்போது மற்றும் எழுதும்போது இனம் நிலை.

இந்த இரண்டு சிக்கல்களும் கீழே விளக்கப்படும்.

பகிரப்பட்ட பொருட்களின் பார்வை

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

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

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

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

இனம் நிலை

இரண்டு அல்லது அதற்கு மேற்பட்ட இழைகள் ஒரே பொருளைப் பகிர்ந்து கொண்டால் மற்றும் ஒன்றுக்கு மேற்பட்ட நூல்கள் அந்த பகிரப்பட்ட பொருளில் மாறிகளைப் புதுப்பித்தால், ஒரு இனம் நிலை ஏற்படலாம்.

த்ரெட் A ஆனது அதன் செயலியின் தற்காலிக சேமிப்பில் பகிரப்பட்ட பொருளின் எண்ணிக்கை மாறியைப் படிக்கிறது என்று கற்பனை செய்து பாருங்கள். திரி B அதையே செய்கிறது, ஆனால் மற்றொரு செயலியின் தற்காலிக சேமிப்பில் என்று கற்பனை செய்து பாருங்கள். இப்போது த்ரெட் A ஆனது எண்ணிக்கையின் மதிப்பில் 1 ஐ சேர்க்கிறது, மேலும் நூல் B அதையே செய்கிறது. இப்போது மாறி இரண்டு முறை அதிகரிக்கப்பட்டுள்ளது - ஒவ்வொரு செயலியின் தற்காலிக சேமிப்பிலும் தனித்தனியாக +1.

இந்த அதிகரிப்புகள் தொடர்ச்சியாகச் செய்யப்பட்டால், எண்ணிக்கை மாறி இரட்டிப்பாக்கப்பட்டு, முதன்மை நினைவகத்தில் (அசல் மதிப்பு + 2) எழுதப்படும்.

இருப்பினும், சரியான ஒத்திசைவு இல்லாமல் ஒரே நேரத்தில் இரண்டு அதிகரிப்புகள் செய்யப்பட்டன. எந்த நூல் (A அல்லது B) மெயின் மெமரிக்கு எண்ணின் புதுப்பிக்கப்பட்ட பதிப்பை எழுதினாலும், புதிய மதிப்பு இரண்டு அதிகரிப்புகள் இருந்தபோதிலும் அசல் மதிப்பை விட 1 மட்டுமே அதிகமாக இருக்கும்.

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

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

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

கருத்துக்கள்
  • பிரபலமானவை
  • புதியவை
  • பழையவை
ஒரு கருத்தைத் தெரிவிக்க நீங்கள் உள்நுழைந்திருக்க வேண்டும்
இந்தப் பக்கத்தில் இதுவரை எந்தக் கருத்தும் வழங்கப்படவில்லை