"हॅलो पुन्हा!"

"आता मी तुम्हाला आणखी एका अद्भुत गोष्टीबद्दल सांगणार आहे: WeakReference ."

"हे जवळजवळ 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();

"कमकुवत संदर्भामध्ये आणखी एक विशेष वैशिष्ट्य आहे."

"एखाद्या वस्तूला सामान्य संदर्भ किंवा मऊ संदर्भ नसल्यास, परंतु केवळ कमकुवत संदर्भ असतील, तर ती वस्तू जिवंत आहे, परंतु पुढील कचरा गोळा करताना ती नष्ट केली जाईल."

"पुन्हा म्हणता येईल का? या संदर्भांमध्ये काय फरक आहे?"

"फक्त SoftReference द्वारे मरणापासून ठेवलेली एखादी वस्तू तुम्हाला पाहिजे तितक्या कचरा गोळा करून जगू शकते आणि जर पुरेशी मेमरी नसेल तर कदाचित नष्ट होईल."

"केवळ कमकुवत संदर्भाने मृत्यूपासून ठेवलेली वस्तू पुढील कचरा संकलनात टिकून राहणार नाही. परंतु असे होईपर्यंत, तुम्ही WeakReference वर get() पद्धत कॉल करून ऑब्जेक्ट मिळवू शकता आणि नंतर त्याच्या पद्धती कॉल करू शकता किंवा त्यासह काहीतरी करू शकता. ."

"ऑब्जेक्टचा संदर्भ SoftReference आणि WeakReference या दोन्हींद्वारे असेल तर?"

"ते सोपे आहे. जर किमान एक नियमित संदर्भ एखाद्या वस्तूकडे निर्देश करत असेल, तर ती जिवंत मानली जाते. तसे, अशा संदर्भाला StrongReference म्हणतात."

"जर कोणतेही नियमित संदर्भ ऑब्जेक्टकडे निर्देश करत नसतील, परंतु सॉफ्टरेफरन्स करत असेल, तर ते हळूवारपणे पोहोचण्यायोग्य आहे."

"कोणतेही नियमित संदर्भ किंवा सॉफ्टरेफरन्स एखाद्या वस्तूकडे निर्देश करत नसल्यास, परंतु कमजोर संदर्भ देत असल्यास, ते दुर्बलपणे पोहोचण्यायोग्य आहे."

"त्याचा विचार करा. सॉफ्टरेफरन्स ऑब्जेक्टला हटवण्यापासून वाचवतो आणि पुरेशी मेमरी नसल्यासच ऑब्जेक्ट हटवला जाईल याची खात्री करतो. कमकुवत संदर्भ पुढील कचरा गोळा होईपर्यंत ऑब्जेक्ट ठेवतो. सॉफ्टरेफरन्स हटविण्यास अधिक प्रतिकार देते."

"आह. मला वाटतं मला समजलं."

"छान, मग मी तुम्हाला आणखी एका मनोरंजक गोष्टीबद्दल सांगेन ज्यामध्ये WeakReferences - WeakHashMap आहे."

"गंभीर वाटतंय!"

"आणि मग काही! एक WeakHashMap हा एक HashMap आहे ज्याच्या की कमजोर संदर्भ आहेत (WeakReferences)."

"म्हणजे, तुम्ही अशा हॅशमॅपमध्ये वस्तू जोडा आणि त्यांच्यासोबत कार्य करा. नेहमीप्रमाणे व्यवसाय."

"जोपर्यंत तुम्ही WeakHashMap मध्ये संग्रहित केलेल्या वस्तूंचे की म्हणून नियमित (मजबूत किंवा मऊ) संदर्भ असतील, तोपर्यंत या वस्तू जिवंत राहतील."

"परंतु समजा संपूर्ण ऍप्लिकेशनमध्ये या वस्तूंचे आणखी कोणतेही संदर्भ नाहीत. त्यांना मरण्यापासून रोखणारे फक्त WeakHashMap मधील काही कमजोर संदर्भ आहेत. पुढील कचरा गोळा केल्यानंतर, अशा वस्तू 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. "WeakHashMap मध्ये, कळा WeakReferences म्हणून संग्रहित केल्या जातात."
  2. "कचरा कलेक्टरद्वारे वापरकर्ता ऑब्जेक्ट नष्ट होताच, रिमूव्ह (वापरकर्ता) पद्धत स्पष्टपणे WeakHashMap मध्ये कॉल केली जाते आणि वापरकर्ता ऑब्जेक्टशी संबंधित कोणतीही माहिती WeakHashMap वरून स्वयंचलितपणे काढून टाकली जाते."

"हे एक शक्तिशाली साधन दिसते. मी ते कुठे वापरू शकतो?"

"ते परिस्थितीवर अवलंबून असते. समजा तुमच्याकडे प्रोग्राममध्ये एक थ्रेड आहे जो ऑब्जेक्टद्वारे दर्शविलेल्या काही टास्कच्या कामाचा मागोवा घेतो आणि त्यांच्याबद्दलची माहिती लॉगवर लिहितो. हा थ्रेड कमजोर हॅशमॅपमध्ये निरीक्षण केलेल्या वस्तू संग्रहित करू शकतो. वस्तूंची गरज नसल्यामुळे, कचरा गोळा करणारा त्यांना हटवतो, आणि त्यांचे संदर्भ देखील WeakHashMap वरून आपोआप काढून टाकले जातात."

"रंजक वाटत आहे. मला असे वाटते की मी अद्याप अशा शक्तिशाली यंत्रणेचा फायदा घेणारे कोणतेही गंभीर Java प्रोग्राम लिहिलेले नाहीत. परंतु मी त्या दिशेने कार्य करेन. एली, अशा मनोरंजक धड्यासाठी खूप धन्यवाद."