"మళ్ళీ హలో!"

"ఇప్పుడు నేను మీకు మరో అద్భుతమైన విషయం గురించి చెప్పబోతున్నాను: బలహీన రిఫరెన్స్ ."

"ఇది దాదాపు సాఫ్ట్ రిఫరెన్స్ లాగానే కనిపిస్తుంది:"

ఉదాహరణ
// 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() పద్ధతికి కాల్ చేసి , దాని పద్ధతులకు కాల్ చేయడం లేదా దానితో ఏదైనా చేయడం ద్వారా వస్తువును పొందవచ్చు. ."

"ఆబ్జెక్ట్ సాఫ్ట్‌రిఫరెన్స్ మరియు వీక్‌రిఫరెన్స్ రెండింటి ద్వారా సూచించబడితే?"

"ఇది చాలా సులభం. కనీసం ఒక సాధారణ రిఫరెన్స్ ఒక వస్తువును సూచించినట్లయితే, అది సజీవంగా పరిగణించబడుతుంది. మార్గం ద్వారా, అటువంటి సూచనను స్ట్రాంగ్ రిఫరెన్స్ అంటారు."

"సాధారణ సూచనలు ఏదీ ఒక వస్తువును సూచించకపోతే, కానీ సాఫ్ట్‌రిఫరెన్స్ చేస్తే, అది మృదువుగా చేరుకోగలదు."

"సాధారణ సూచనలు లేదా సాఫ్ట్‌రిఫరెన్స్‌లు ఏ వస్తువును సూచించకపోయినా, బలహీనమైన సూచన చేస్తే, అది బలహీనంగా చేరుకోగలదు."

"దాని గురించి ఆలోచించండి. సాఫ్ట్‌రిఫరెన్స్ ఆబ్జెక్ట్‌ను తొలగించకుండా రక్షిస్తుంది మరియు తగినంత మెమరీ లేనప్పుడు మాత్రమే ఆబ్జెక్ట్ తొలగించబడుతుందని నిర్ధారిస్తుంది. బలహీనమైన రిఫరెన్స్ తదుపరి చెత్త సేకరణ వరకు వస్తువును ఉంచుతుంది. సాఫ్ట్‌రిఫరెన్స్ తొలగింపుకు ఎక్కువ ప్రతిఘటనను అందిస్తుంది."

"ఆహ్. నేను అర్థం చేసుకున్నాను."

"అద్భుతంగా ఉంది, బలహీనమైన రిఫరెన్స్‌లతో కూడిన మరొక ఆసక్తికరమైన విషయం గురించి నేను మీకు చెప్తాను — WeakHashMap."

"గంభీరంగా ఉంది కదూ!"

"ఆపై కొన్ని! బలహీనమైన హాష్ మ్యాప్ అనేది హ్యాష్ మ్యాప్, దీని కీలు బలహీనమైన సూచనలు (వీక్ రిఫరెన్స్‌లు)."

"అంటే, మీరు అలాంటి HashMapకి వస్తువులను జోడించి, వాటితో పని చేయండి. వ్యాపారం యథావిధిగా."

"మీరు WeakHashMapలో నిల్వ చేసే వస్తువులు సాధారణ (బలమైన లేదా మృదువైన) సూచనలను కీలుగా కలిగి ఉన్నంత వరకు, ఈ వస్తువులు సజీవంగా ఉంటాయి."

"కానీ మొత్తం అప్లికేషన్‌లో ఈ వస్తువులకు సంబంధించి మరిన్ని సూచనలు లేవని అనుకుందాం. వీక్‌హాష్‌మ్యాప్‌లోని కొన్ని బలహీనమైన రిఫరెన్స్‌లు వాటిని చనిపోకుండా ఉంచుతాయి. తదుపరి చెత్త సేకరణ తర్వాత, అలాంటి వస్తువులు వీక్‌హ్యాష్‌మ్యాప్ నుండి అదృశ్యమవుతాయి. వాటంతట అవే. ఎప్పుడూ అక్కడ లేరు."

"నేను అర్థం చేసుకున్నాను అని నాకు ఖచ్చితంగా తెలియదు."

"మీరు WeakHashMapలో జతల వస్తువులను నిల్వ చేస్తారు: ఒక కీ మరియు ఒక విలువ. కానీ WeakHashMap నేరుగా కీలను సూచించదు, కానీ WeakReferences ద్వారా సూచించదు. అందువల్ల, కీలుగా ఉపయోగించిన వస్తువులు బలహీనంగా చేరుకోగలిగినప్పుడు, అవి తదుపరి సమయంలో నాశనం చేయబడతాయి. చెత్త సేకరణ మరియు ఫలితంగా, వాటి విలువలు కూడా స్వయంచాలకంగా 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. "గార్బేజ్ కలెక్టర్ ద్వారా వినియోగదారు ఆబ్జెక్ట్ నాశనం అయిన వెంటనే, తొలగించు(యూజర్) పద్ధతిని వీక్‌హాష్‌మ్యాప్‌లో పరోక్షంగా పిలుస్తారు మరియు వినియోగదారు వస్తువుతో అనుబంధించబడిన ఏదైనా సమాచారం స్వయంచాలకంగా వీక్‌హాష్‌మ్యాప్ నుండి తీసివేయబడుతుంది."

"ఇది శక్తివంతమైన సాధనంగా కనిపిస్తోంది. నేను దీన్ని ఎక్కడ ఉపయోగించగలను?"

"అది పరిస్థితులపై ఆధారపడి ఉంటుంది. మీరు ప్రోగ్రామ్‌లో కొన్ని టాస్క్‌ల పనిని ట్రాక్ చేసే థ్రెడ్‌ని కలిగి ఉన్నారని అనుకుందాం, ఆబ్జెక్ట్‌ల ద్వారా ప్రాతినిధ్యం వహిస్తుంది మరియు వాటి గురించిన సమాచారాన్ని లాగ్‌లో వ్రాస్తుంది. ఈ థ్రెడ్ పర్యవేక్షించబడే వస్తువులను వీక్‌హాష్‌మ్యాప్‌లో నిల్వ చేయగలదు. వెంటనే వస్తువులు అవసరం లేనందున, చెత్త సేకరించేవాడు వాటిని తొలగిస్తాడు మరియు వాటికి సంబంధించిన సూచనలు కూడా వీక్‌హాష్‌మ్యాప్ నుండి స్వయంచాలకంగా తీసివేయబడతాయి."

"ఆసక్తికరంగా ఉంది. ఇంత శక్తివంతమైన మెకానిజమ్‌ల ప్రయోజనాన్ని పొందే తీవ్రమైన జావా ప్రోగ్రామ్‌లు ఏవీ నేను ఇంకా వ్రాయలేదని నేను ఇప్పటికే భావిస్తున్నాను. కానీ నేను ఆ దిశగా పని చేస్తాను. చాలా ధన్యవాదాలు, ఎల్లీ, ఇంత ఆసక్తికరమైన పాఠం కోసం."