"மீண்டும் வணக்கம்!"

"இப்போது நான் இன்னும் ஒரு அற்புதமான விஷயத்தைப் பற்றி உங்களுக்குச் சொல்லப் போகிறேன்: பலவீனமான குறிப்பு ."

"இது கிட்டத்தட்ட SoftReference போலவே தெரிகிறது:"

உதாரணமாக
// Create a Cat object
Cat cat = new Cat();

// Create a weak reference to a Cat object
WeakReference<Cat> catRef = new WeakReference<Cat>(cat);

// Now only the catRef weak reference points at the object
cat = null;

// Now the ordinary cat variable also references the object
cat = catRef.get();

// Clear the weak reference
catRef.clear();

"பலவீனமான குறிப்பு மற்றொரு சிறப்பு அம்சத்தைக் கொண்டுள்ளது."

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

"அதை மீண்டும் சொல்ல முடியுமா? இந்தக் குறிப்புகளுக்கு என்ன வித்தியாசம்?"

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

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

"ஆப்ஜெக்ட் ஒரு SoftReference மற்றும் ஒரு WeakReference இரண்டாலும் குறிப்பிடப்பட்டால் என்ன செய்வது?"

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

"வழக்கமான குறிப்புகள் எதுவும் ஒரு பொருளைச் சுட்டிக்காட்டவில்லை என்றால், ஆனால் ஒரு SoftReference செய்தால், அது மென்மையாக அணுகக்கூடியது."

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

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

"ஆமா. எனக்குப் புரிந்திருக்கும் என்று நினைக்கிறேன்."

"நல்லது, பலவீனமான குறிப்புகளை உள்ளடக்கிய மற்றொரு சுவாரஸ்யமான விஷயத்தைப் பற்றி நான் உங்களுக்குச் சொல்கிறேன் - WeakHashMap."

"தீவிரமாக இருக்கிறது!"

"பின்னர் சில! ஒரு பலவீனமான ஹாஷ்மேப் என்பது ஹாஷ்மேப் ஆகும், அதன் விசைகள் பலவீனமான குறிப்புகள் (பலவீனமான குறிப்புகள்) ஆகும்."

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

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

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

"நான் புரிந்து கொண்டேன் என்று எனக்குத் தெரியவில்லை."

"நீங்கள் ஒரு WeakHashMap இல் ஜோடி பொருட்களை சேமிக்கிறீர்கள்: ஒரு விசை மற்றும் ஒரு மதிப்பு. ஆனால் WeakHashMap விசைகளை நேரடியாக குறிப்பிடுவதில்லை, மாறாக பலவீனமான குறிப்புகள் மூலம் குறிப்பிடுகிறது. எனவே, விசைகளாகப் பயன்படுத்தப்படும் பொருள்கள் பலவீனமாக அடையும் போது, ​​​​அவை அடுத்த கட்டத்தில் அழிக்கப்படுகின்றன. குப்பை சேகரிப்பு. இதன் விளைவாக, அவற்றின் மதிப்புகள் வீக்ஹாஷ்மேப்பில் இருந்து தானாகவே அகற்றப்படும்."

"சில பொருட்களைப் பற்றிய கூடுதல் தகவல்களைச் சேமிக்க, WeakHashMap ஐப் பயன்படுத்துவது மிகவும் வசதியானது."

"முதலில், நீங்கள் பொருளையே முக்கியமாகப் பயன்படுத்தினால், தகவலை அணுகுவது மிகவும் எளிதானது."

"இரண்டாவது, பொருள் அழிக்கப்பட்டால், அது ஹாஷ்மேப்பில் இருந்து அனைத்து தொடர்புடைய தரவுகளுடன் மறைந்துவிடும்."

"உதாரணத்திற்கு:

உதாரணமாக
// Create an object to store additional information about the user
WeakHashMap<User, StatisticInfo> userStatistics = new WeakHashMap<User, StatisticInfo>();

// Put information about the user into userStatistics
User user = session.getUser();
userStatistics.put(user, new StatisticInfo ());

// Get information about the user from userStatistics
User user = session.getUser();
StatisticInfo statistics = userStatistics.get(user);

// Remove any information about the user from userStatistics
User user = session.getUser();
userStatistics.remove(user);
  1. "வீக்ஹாஷ்மேப்பின் உள்ளே, விசைகள் பலவீனமான குறிப்புகளாக சேமிக்கப்படும்."
  2. "குப்பை சேகரிப்பாளரால் பயனர் பொருள் அழிக்கப்பட்டவுடன், அகற்று(பயனர்) முறை மறைமுகமாக WeakHashMap க்குள் அழைக்கப்படுகிறது மற்றும் பயனர் பொருளுடன் தொடர்புடைய எந்த தகவலும் தானாகவே WeakHashMap இலிருந்து அகற்றப்படும்."

"இது ஒரு சக்திவாய்ந்த கருவி போல் தெரிகிறது. இதை நான் எங்கே பயன்படுத்தலாம்?"

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

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