"வணக்கம், அமிகோ!"

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

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

"மேலும் சிக்கலானது!"

"ஆம், சிறந்தது மற்றும் சிக்கலானது. இது ஒரு விமானம் போன்றது. நடப்பதை விட விமானத்தில் பறப்பது சிறந்தது, ஆனால் மிகவும் சிக்கலானது. புதிய சூழ்நிலையை மிகவும் எளிமையாக விளக்க முயற்சிக்கிறேன்."

"இங்கே அவர்கள் கண்டுபிடித்தனர். உள்ளூர் நூல் நினைவகத்தை ஒத்திசைப்பதற்கான ஒரு பொறிமுறையானது, 'happens-before' எனப்படும், குறியீட்டில் சேர்க்கப்பட்டது. பல விதிகள்/நிபந்தனைகள் கண்டுபிடிக்கப்பட்டன. இந்த நிபந்தனைகள் திருப்தி அடையும் போது, ​​நினைவகம் ஒத்திசைக்கப்படுகிறது அல்லது தற்போதைய நிலைக்கு புதுப்பிக்கப்படுகிறது. நிலை.

"இதோ ஒரு உதாரணம்:"

ஆர்டர் நூல் 1 நூல் 2
1
2

101
102
103
104
105

201
202
203
204
205
public int y = 1;
public int x = 1;

x = 2;
synchronized(mutex)
{
 y = 2;
}
மியூடெக்ஸ் வெளியிடப்படுவதற்கு நூல் காத்திருக்கிறது

synchronized(mutex)
{
 if (y == x)
 System.out.println("YES");
}

"இந்த நிபந்தனைகளில் ஒன்று வெளியிடப்பட்ட மியூடெக்ஸைப் பெறுவது. ஒரு மியூடெக்ஸ் வெளியிடப்பட்டு மீண்டும் பெறப்பட்டால், பிறகு நினைவகம் கையகப்படுத்தப்படுவதற்கு முன்பு ஒத்திசைக்கப்படும். த்ரெட் 2 ஆனது x மற்றும் y மாறிகளின் 'சமீபத்திய' மதிப்புகளைக் காணும். நீங்கள் அவற்றை நிலையற்றதாக அறிவிக்க வேண்டாம்."

"எவ்வளவு சுவாரஸ்யமானது! மேலும் இந்த நிபந்தனைகள் நிறைய உள்ளனவா?"

"போதும் - நினைவகத்தை ஒத்திசைக்க சில நிபந்தனைகள் உள்ளன:"

  • "ஒற்றை நூலுக்குள், எந்த ஒரு கட்டளையும் நடக்கும்- மூலக் குறியீட்டில் அதைப் பின்தொடரும் எந்தவொரு செயலுக்கும் முன்."
  • "ஒரு பூட்டின் வெளியீடு நிகழ்கிறது- அதே பூட்டைப் பெறுவதற்கு முன்பு."
  • " ஒத்திசைக்கப்பட்ட தொகுதி/முறையில்  இருந்து வெளியேறுவது - ஒத்திசைக்கப்பட்ட தொகுதி/முறையை அதே மானிட்டரில் உள்ளிடுவதற்கு முன் நடக்கும்."
  • "ஒரு ஆவியாகும் புலத்தை நினைவகத்திற்கு எழுதுவது நடக்கிறது - அதே ஆவியாகும் புலம் நினைவகத்திலிருந்து படிக்கப்படுவதற்கு முன்பு."
  • "ஒரு த்ரெட் ஆப்ஜெக்ட்டின் ரன் முறையின் முடிவு நடக்கிறது- சேர்க்கும்() முறை முடிவடைவதற்கு முன் அல்லது அதே த்ரெட்டில் உள்ள பொருளின் மீது isAlive() முறை தவறானதாக இருக்கும்."
  • "ஒரு த்ரெட் பொருளின் தொடக்க() முறைக்கான அழைப்பு - அதே நூலில் உள்ள பொருளில் ரன்() முறை தொடங்கும் முன்."
  • "கட்டமைப்பாளரின் முடிவு நடக்கிறது- இந்த வகுப்பின் இறுதி() முறையின் தொடக்கத்திற்கு முன்."
  • "இன்டர்ரப்ட்() முறைக்கான அழைப்பு நடக்கும்- இந்த முறை அழைக்கப்பட்டதைத் தொடருக்கு முன், ஒரு InterruptedException வீசப்பட்டதாலோ அல்லது isInterrupted() அல்லது interrupted() முறைகளைப் பயன்படுத்துவதன் மூலமோ."

"அப்படியானால், நான் நினைத்ததை விட எல்லாம் கொஞ்சம் சிக்கலானதா?"

"ஆமாம், கொஞ்சம் சிக்கலானது..."

"நன்றி ரிஷி. நான் யோசிக்கிறேன்."

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

"ஓ_ஓ. ஆமாம்... சில விஷயங்கள் தெரியாமல் இருப்பது நல்லது."