8.1 జావాలో బలహీనమైన సూచనలు
జావాలో అనేక రకాల సూచనలు ఉన్నాయి.
బలమైన రిఫరెన్స్ ఉంది - ఇవి మనం ప్రతిరోజూ సృష్టించే అత్యంత సాధారణ లింక్లు.
Object object = new Object();//created an object
object = null;//can now be garbage collected
మరియు మూడు "ప్రత్యేక" రకాల లింక్లు ఉన్నాయి - సాఫ్ట్ రిఫరెన్స్, వీక్ రిఫరెన్స్, ఫాంటమ్ రిఫరెన్స్. వాస్తవానికి, అన్ని రకాల లింక్ల మధ్య ఒకే ఒక వ్యత్యాసం ఉంది - వారు సూచించే వస్తువులతో GC యొక్క ప్రవర్తన. మేము ప్రతి లింక్ రకం యొక్క ప్రత్యేకతలను తరువాత మరింత వివరంగా చర్చిస్తాము, కానీ ప్రస్తుతానికి, ఈ క్రింది జ్ఞానం సరిపోతుంది:
- సాఫ్ట్ రిఫరెన్స్ అనేది సాఫ్ట్ రిఫరెన్స్, ఒక వస్తువు సాఫ్ట్ రిఫరెన్స్ల గొలుసు ద్వారా మాత్రమే యాక్సెస్ చేయబడుతుందని GC చూసినట్లయితే, అది దానిని మెమరీ నుండి తీసివేస్తుంది. బహుశా.
- బలహీన రిఫరెన్స్ - బలహీనమైన సూచన, బలహీనమైన సూచనల గొలుసు ద్వారా మాత్రమే ఆబ్జెక్ట్ని యాక్సెస్ చేయవచ్చని GC చూసినట్లయితే, అది దానిని మెమరీ నుండి తీసివేస్తుంది.
- ఫాంటమ్ రిఫరెన్స్ అనేది ఫాంటమ్ రిఫరెన్స్, ఒక వస్తువు ఫాంటమ్ రిఫరెన్స్ల గొలుసు ద్వారా మాత్రమే అందుబాటులో ఉందని GC చూసినట్లయితే, అది దానిని మెమరీ నుండి తీసివేస్తుంది. GC యొక్క అనేక పరుగుల తర్వాత.
లింక్ రకాలు కొంత మృదుత్వాన్ని కలిగి ఉన్నాయని కూడా మీరు చెప్పవచ్చు:
- సాధారణ హార్డ్ లింక్ అనేది రిఫరెన్స్ రకానికి చెందిన ఏదైనా వేరియబుల్. నిరుపయోగంగా మారకముందే చెత్త సేకరించేవారిచే శుభ్రం చేయబడలేదు.
- సాఫ్ట్ రిఫరెన్స్ . ఆబ్జెక్ట్ మొత్తం మెమరీని ఉపయోగించదు - OutOfMemoryError సంభవించే ముందు అది తొలగించబడుతుందని హామీ ఇవ్వబడుతుంది. బహుశా ముందుగా, చెత్త కలెక్టర్ అమలుపై ఆధారపడి ఉంటుంది.
- బలహీనమైన సూచన . బలహీనమైన మృదువైన. వస్తువును పారవేయకుండా నిరోధించదు; చెత్త సేకరించేవాడు అటువంటి సూచనలను విస్మరిస్తాడు.
- ఫాంటమ్ రిఫరెన్స్ . ఆబ్జెక్ట్ యొక్క "డెత్" ప్రాసెసింగ్ కోసం ఉపయోగించబడుతుంది: వస్తువు చెత్తను సేకరించే వరకు ఖరారు చేసిన తర్వాత అందుబాటులో ఉంటుంది.
తేడా ఏమిటో ఇంకా స్పష్టంగా తెలియకపోతే, చింతించకండి, త్వరలో ప్రతిదీ అమల్లోకి వస్తుంది. వివరాలు వివరాలలో ఉన్నాయి మరియు వివరాలు అనుసరించబడతాయి.
8.2 జావాలో బలహీన రిఫరెన్స్ మరియు సాఫ్ట్ రిఫరెన్స్
ముందుగా, జావాలో వీక్ రిఫరెన్స్ మరియు సాఫ్ట్ రిఫరెన్స్ మధ్య వ్యత్యాసాన్ని చూద్దాం .
క్లుప్తంగా చెప్పాలంటే, బలహీనమైన సూచనలు మాత్రమే సూచించినట్లయితే చెత్త కలెక్టర్ ఒక వస్తువు యొక్క మెమరీని ఖాళీ చేస్తాడు. సాఫ్ట్రిఫరెన్స్ల ద్వారా ఆబ్జెక్ట్ సూచించబడితే, JVMకి మెమరీ చాలా అవసరం అయినప్పుడు మెమరీ డీలోకేట్ చేయబడుతుంది.
ఇది నిర్దిష్ట సందర్భాలలో బలమైన సూచన కంటే సాఫ్ట్రిఫరెన్స్కు ఖచ్చితమైన ప్రయోజనాన్ని ఇస్తుంది . ఉదాహరణకు, సాఫ్ట్రిఫరెన్స్ అప్లికేషన్ కాష్ని అమలు చేయడానికి ఉపయోగించబడుతుంది, కాబట్టి JVM చేసే మొదటి పని SoftReferences మాత్రమే సూచించే వస్తువులను తొలగించడం.
క్లాస్లోడర్కు సూచనను నిల్వ చేయడం వంటి మెటాడేటాను నిల్వ చేయడానికి వీక్రిఫరెన్స్ గొప్పది. క్లాస్ ఏదీ లోడ్ కానట్లయితే, మీరు క్లాస్లోడర్ని సూచించకూడదు. దీని కారణంగానే చెత్త సేకరణకర్త క్లాస్లోడర్కు సంబంధించిన చివరి బలమైన సూచన తీసివేయబడిన వెంటనే దాని పనిని చేయడానికి వీక్రిఫరెన్స్ సాధ్యం చేస్తుంది.
జావాలో బలహీన సూచన ఉదాహరణ:
// 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 జావాలో ఫాంటమ్ రిఫరెన్స్
ఫాంటమ్ రిఫరెన్స్ ఉదాహరణ బలహీన రిఫరెన్స్ మరియు సాఫ్ట్రిఫరెన్స్ ఉదాహరణల మాదిరిగానే సృష్టించబడింది, అయితే ఇది చాలా అరుదుగా ఉపయోగించబడుతుంది.
ఆబ్జెక్ట్లో బలమైన (బలమైన), బలహీనమైన (బలహీనమైన) లేదా మృదువైన (సాఫ్ట్రిఫరెన్స్) సూచనలు లేకుంటే ఫాంటమ్ రిఫరెన్స్ చెత్తను సేకరించవచ్చు.
మీరు ఇలా ఫాంటమ్ రిఫరెన్స్ ఆబ్జెక్ట్ని సృష్టించవచ్చు:
PhantomReference myObjectRef = new PhantomReference(MyObject);
PhantomReference అనేది ఫైనల్()కు అర్థం లేని సందర్భాల్లో ఉపయోగించవచ్చు. ఈ సూచన రకం ఇతర రకాల నుండి భిన్నంగా ఉంటుంది, ఎందుకంటే ఇది వస్తువును యాక్సెస్ చేయడానికి రూపొందించబడలేదు. వస్తువు ఇప్పటికే ఖరారు చేయబడిందని మరియు చెత్త కలెక్టర్ దాని జ్ఞాపకశక్తిని తిరిగి పొందేందుకు సిద్ధంగా ఉన్నారని ఇది సంకేతం.
దీన్ని చేయడానికి, చెత్త కలెక్టర్ దానిని తదుపరి ప్రాసెసింగ్ కోసం ప్రత్యేక రిఫరెన్స్ క్యూలో ఉంచారు. రిఫరెన్స్ క్యూ అంటే ఆబ్జెక్ట్ రిఫరెన్స్లు ఉచిత మెమరీకి ఉంచబడతాయి.
ఒక వస్తువు మెమరీ నుండి తీసివేయబడిందని తెలుసుకోవడానికి ఫాంటమ్ సూచనలు సురక్షితమైన మార్గం. ఉదాహరణకు, పెద్ద చిత్రాలతో వ్యవహరించే అప్లికేషన్ను పరిగణించండి. చెత్త సేకరణకు సిద్ధంగా ఉన్న ఇమేజ్ని మెమరీలో ఇప్పటికే లోడ్ చేయాలనుకుంటున్నాము. ఈ సందర్భంలో, కొత్త చిత్రాన్ని మెమరీలోకి లోడ్ చేయడానికి ముందు పాత చిత్రాన్ని నాశనం చేయడానికి చెత్త కలెక్టర్ కోసం మేము వేచి ఉండాలనుకుంటున్నాము.
ఇక్కడ PhantomReference అనువైన మరియు సురక్షితమైన ఎంపిక. పాత ఇమేజ్ ఆబ్జెక్ట్ నాశనం అయిన తర్వాత పాత ఇమేజ్కి సంబంధించిన రిఫరెన్స్ ReferenceQueueకి పంపబడుతుంది. ఈ లింక్ని కలిగి ఉన్న తర్వాత, మనం కొత్త చిత్రాన్ని మెమరీలోకి లోడ్ చేయవచ్చు.