CodeGym /Java Course /मॉड्यूल 3 /Java मध्ये जंक लिंक्स

Java मध्ये जंक लिंक्स

मॉड्यूल 3
पातळी 18 , धडा 7
उपलब्ध

8.1 Java मध्ये कमकुवत संदर्भ

Java मध्ये अनेक प्रकारचे संदर्भ आहेत.

StrongReference आहे - हे सर्वात सामान्य दुवे आहेत जे आपण दररोज तयार करतो.

Object object = new Object();//created an object
object = null;//can now be garbage collected

आणि तीन "विशेष" प्रकारचे दुवे आहेत - SoftReference, WeakReference, PhantomReference. खरं तर, सर्व प्रकारच्या लिंक्समध्ये फक्त एकच फरक आहे - जीसीचे वर्तन ते ज्या वस्तूंचा संदर्भ घेतात. आम्ही प्रत्येक लिंक प्रकाराच्या वैशिष्ट्यांबद्दल नंतर अधिक तपशीलवार चर्चा करू, परंतु आतासाठी, खालील ज्ञान पुरेसे आहे:

  • SoftReference हा एक मऊ संदर्भ आहे, जर GC ला दिसले की एखादी वस्तू फक्त सॉफ्ट रेफरन्सच्या साखळीद्वारे प्रवेशयोग्य आहे, तर तो ती मेमरीमधून काढून टाकेल. कदाचित.
  • WeakReference - एक कमकुवत संदर्भ, जर GC ला दिसले की एखादी वस्तू केवळ कमकुवत संदर्भांच्या साखळीद्वारे प्रवेशयोग्य आहे, तर तो ती मेमरीमधून काढून टाकेल.
  • PhantomReference हा एक फँटम संदर्भ आहे, जर GC ला दिसले की एखादी वस्तू केवळ फॅंटम संदर्भांच्या साखळीद्वारे उपलब्ध आहे, तर तो ती मेमरीमधून काढून टाकेल. GC च्या अनेक धावा नंतर.

आपण असेही म्हणू शकता की दुव्याच्या प्रकारांमध्ये विशिष्ट प्रमाणात सौम्यता असते:

  • रेग्युलर हार्ड लिंक हे संदर्भ प्रकाराचे कोणतेही चल असते. कचरा वेचणा-याने तो विनावापर होण्यापूर्वी साफ केला नाही.
  • सॉफ्ट रेफरन्स . ऑब्जेक्टमुळे सर्व मेमरी वापरली जाणार नाही - OutOfMemoryError येण्यापूर्वी ती हटवली जाण्याची हमी दिली जाते. कदाचित पूर्वी, कचरा गोळा करणाऱ्याच्या अंमलबजावणीवर अवलंबून.
  • दुर्बल संदर्भ . कमकुवत मऊ. वस्तूची विल्हेवाट लावण्यापासून रोखत नाही; कचरा गोळा करणारे अशा संदर्भांकडे दुर्लक्ष करतात.
  • फॅन्टम संदर्भ . एखाद्या वस्तूच्या "मृत्यू" प्रक्रियेसाठी वापरला जातो: वस्तू अंतिम झाल्यानंतर कचरा गोळा होईपर्यंत उपलब्ध असतो.

फरक काय आहे हे अद्याप स्पष्ट नसल्यास, काळजी करू नका, लवकरच सर्व काही ठिकाणी पडेल. तपशील तपशिलांमध्ये आहेत, आणि तपशीलांचे अनुसरण केले जाईल.

8.2 Java मध्ये कमजोर संदर्भ आणि सॉफ्ट रेफरन्स

प्रथम, Java मधील WeakReference आणि SoftReference मधील फरक पाहू .

थोडक्यात, कचरा गोळा करणारा एखाद्या वस्तूची स्मृती मुक्त करेल जर केवळ कमकुवत संदर्भ त्यास सूचित करतात. जर ऑब्जेक्टला SoftReferences द्वारे निर्देशित केले असेल, तर जेव्हा JVM ला मेमरीची नितांत गरज असते तेव्हा मेमरी डिलॉक केली जाते.

हे काही विशिष्ट प्रकरणांमध्ये मजबूत संदर्भापेक्षा SoftReference ला निश्चित फायदा देते . उदाहरणार्थ, सॉफ्टरेफरन्सचा वापर अॅप्लिकेशन कॅशे लागू करण्यासाठी केला जातो, म्हणून JVM प्रथम गोष्ट करेल ते ऑब्जेक्ट्स हटवा ज्याकडे फक्त SoftReferences निर्देश करतात.

मेटाडेटा संचयित करण्यासाठी WeakReference उत्तम आहे, जसे की क्लासलोडरचा संदर्भ संचयित करणे. जर कोणताही वर्ग लोड केला नसेल, तर तुम्ही ClassLoader चा संदर्भ घेऊ नये. म्हणूनच WeakReference मुळे कचरा गोळा करणार्‍याला क्लासलोडरवरील शेवटचा मजबूत संदर्भ काढून टाकल्यावर त्याचे काम करणे शक्य होते.

जावा मध्ये कमजोर संदर्भ उदाहरण:

// some object
Student student = new Student();

// weak reference to it
WeakReference weakStudent = new WeakReference(student);

// now the Student object can be garbage collected
student = null;

जावा मधील सॉफ्ट रेफरन्स उदाहरण:

// some object
Student student = new Student();

// weak reference to it
SoftReference softStudent = new SoftReference(student)

// now the Student object can be garbage collected
// but this will only happen if the JVM has a strong need for memory
student = null;

8.3 Java मध्ये PhantomReference

PhantomReference उदाहरण हे WeakReference आणि SoftReference उदाहरणांप्रमाणेच तयार केले आहे, परंतु ते क्वचितच वापरले जाते.

ऑब्जेक्टमध्ये मजबूत (मजबूत), कमकुवत (कमकुवत संदर्भ) किंवा सॉफ्ट (सॉफ्टरेफरन्स) संदर्भ नसल्यास फॅंटमरेफरन्स कचरा गोळा केला जाऊ शकतो.

तुम्ही याप्रमाणे फॅंटम संदर्भ ऑब्जेक्ट तयार करू शकता:

PhantomReference myObjectRef = new PhantomReference(MyObject);

PhantomReference अशा परिस्थितीत वापरले जाऊ शकते जेथे finalize() ला अर्थ नाही. हा संदर्भ प्रकार इतर प्रकारांपेक्षा वेगळा आहे कारण तो ऑब्जेक्टमध्ये प्रवेश करण्यासाठी डिझाइन केलेला नाही. हे एक सिग्नल आहे की ऑब्जेक्ट आधीच अंतिम केले गेले आहे आणि कचरा संग्राहक त्याची मेमरी पुन्हा मिळवण्यासाठी तयार आहे.

हे करण्यासाठी, कचरा संग्राहक पुढील प्रक्रियेसाठी एका विशेष संदर्भ रांगेत ठेवतो. ReferenceQueue म्हणजे जिथे ऑब्जेक्ट संदर्भ फ्री मेमरीमध्ये ठेवले जातात.

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

येथे PhantomReference ही एक लवचिक आणि सुरक्षित निवड आहे. जुनी इमेज ऑब्जेक्ट नष्ट झाल्यानंतर जुन्या प्रतिमेचा संदर्भ संदर्भ रांगेत जाईल. ही लिंक मिळाल्यावर, आम्ही नवीन प्रतिमा मेमरीमध्ये लोड करू शकतो.

3
Опрос
Working with memory in Java,  18 уровень,  7 лекция
недоступен
Working with memory in Java
Working with memory in Java
टिप्पण्या
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION