CodeGym /జావా బ్లాగ్ /యాదృచ్ఛికంగా /చెత్త కలెక్టర్ గురించి మరింత
John Squirrels
స్థాయి
San Francisco

చెత్త కలెక్టర్ గురించి మరింత

సమూహంలో ప్రచురించబడింది
హాయ్! చివరి పాఠంలో, మేము మొదట జావా యొక్క అంతర్నిర్మిత చెత్త కలెక్టర్‌తో పరిచయం అయ్యాము మరియు అది ఎలా పని చేస్తుందనే దాని గురించి స్థూల ఆలోచన వచ్చింది. ఇది మీ ప్రోగ్రామ్ రన్ అవుతున్నప్పుడు నేపథ్యంలో పని చేస్తుంది, తర్వాత తొలగించబడే అనవసరమైన వస్తువులను సేకరిస్తుంది. అందువలన, ఇది భవిష్యత్తులో కొత్త వస్తువులను సృష్టించడానికి ఉపయోగపడే మెమరీని ఖాళీ చేస్తుంది.
చెత్త కలెక్టర్ గురించి మరింత - 1
ఈ పాఠంలో, ఇది ఎలా పని చేస్తుందో మేము మరింత వివరంగా చర్చిస్తాము. ఉదాహరణకు, ఒక వస్తువు ఎలా మరియు ఎప్పుడు అనవసరం అవుతుంది? మరియు చెత్త సేకరించేవాడు ఎలా కనుగొంటాడు? ఇవి నేటి పాఠంలో మేము సమాధానం చెప్పే ప్రశ్నలు :) పాఠం స్థూలదృష్టి వలె ఉంటుంది: మీరు ఈ విషయాన్ని హృదయపూర్వకంగా నేర్చుకోవాల్సిన అవసరం లేదు. జ్ఞాపకశక్తి మరియు చెత్త సేకరించే యంత్రం ఎలా పని చేస్తాయనే దాని గురించి మీ దృష్టిని విస్తరించాలనే ఉద్దేశ్యం ప్రధానంగా ఉంది, కాబట్టి చదవండి మరియు మీ కోసం కొత్తదాన్ని కనుగొనండి :) వెళ్దాం! మీరు గుర్తుంచుకోవలసిన మొదటి విషయం ఏమిటంటే, చెత్త కలెక్టర్ మీ ప్రోగ్రామ్‌తో సమాంతరంగా పని చేస్తుంది. ఇది మీ ప్రోగ్రామ్‌లో భాగం కాదు. ఇది విడిగా నడుస్తుంది (గత పాఠంలో, మేము దీనిని రోబోట్ వాక్యూమ్ క్లీనర్‌తో పోల్చాము) కానీ ఇది ఎల్లప్పుడూ అలా ఉండదు. చెత్త సేకరణ మీ ప్రోగ్రామ్ వలె అదే థ్రెడ్‌లో నిర్వహించబడుతుంది. కొన్ని షెడ్యూల్‌లో (కొన్ని నిమిషాలకు ఒకసారి), చెత్త సేకరించేవాడు ప్రోగ్రామ్‌లో అవాంఛిత వస్తువుల ఉనికిని తనిఖీ చేస్తాడు. సమస్య ఏమిటంటే, ఈ తనిఖీ మరియు చెత్త సేకరణ సమయంలో ప్రోగ్రామ్ హ్యాంగ్ అవుతుంది (ఎగ్జిక్యూట్ కాదు). మీరు పనిలో మీ కార్యాలయంలో కూర్చున్నట్లు ఊహించుకోండి. కానీ అప్పుడు క్లీనింగ్ లేడీ అంతస్తులు కడగడానికి వస్తుంది. ఆమె మిమ్మల్ని మీ కంప్యూటర్ నుండి 5 నిమిషాల పాటు దూరం చేస్తుంది మరియు ఆమె శుభ్రపరచడం పూర్తయ్యే వరకు మీరు వేచి ఉండండి. ఈ సమయంలో, మీరు పని చేయలేరు. చెత్త సేకరణ ఒకప్పుడు ఎలా పని చేస్తుందో దాని గురించి :) ఈ మెకానిజం తరువాత మార్చబడింది మరియు ఇప్పుడు చెత్త కలెక్టర్ నేపథ్యంలో నడుస్తుంది, కార్యక్రమం యొక్క పనికి ఆటంకం కలిగించదు. ఒక వస్తువు ఇకపై సూచనలు లేనప్పుడు చనిపోతుందని మీకు ఇప్పటికే తెలుసు. వాస్తవానికి,చెత్త సేకరించేవాడు వస్తువు సూచనలను లెక్కించడు . మొదట, దీనికి చాలా సమయం పట్టవచ్చు. రెండవది, ఇది చాలా ప్రభావవంతంగా లేదు. అన్నింటికంటే, వస్తువులు ఒకదానికొకటి సూచించగలవు! చెత్త కలెక్టర్ గురించి మరింత - 23 వస్తువులు ఒకదానికొకటి సూచించే ఉదాహరణను బొమ్మ చూపిస్తుంది, కానీ మరెవరూ వాటిని సూచించరు. మరో మాటలో చెప్పాలంటే, మిగిలిన ప్రోగ్రామ్‌లకు అవి అవసరం లేదు. చెత్త సేకరించేవాడు కేవలం రిఫరెన్స్‌లను లెక్కించినట్లయితే, ఈ 3 వస్తువులు సేకరించబడవు మరియు జ్ఞాపకశక్తి విముక్తి పొందదు (వాటికి సూచనలు ఉన్నాయి!). దీనిని మనం అంతరిక్ష నౌకతో పోల్చవచ్చు. విమాన సమయంలో, వ్యోమగాములు మరమ్మతుల కోసం అందుబాటులో ఉన్న విడిభాగాల జాబితాను తనిఖీ చేయాలని నిర్ణయించుకుంటారు. ఇతర విషయాలతోపాటు, వారు ఒక సాధారణ కారు నుండి స్టీరింగ్ వీల్ మరియు పెడల్స్‌ను కనుగొంటారు. సహజంగానే, అవి ఇక్కడ అవసరం లేదు మరియు అనవసరంగా స్థలాన్ని తీసుకుంటున్నాయి (ఈ రెండు భాగాలు ఒకదానికొకటి సంబంధించినవి మరియు కొన్ని విధులను కలిగి ఉన్నప్పటికీ). కానీ వ్యోమనౌక లోపల, అవి విస్మరించవలసిన పనికిరాని చెత్త. దీని ప్రకారం, జావాలో, రిఫరెన్స్ లెక్కింపు ఆధారంగా కాకుండా చెత్తను సేకరించడానికి నిర్ణయం తీసుకోబడింది,చేరుకోదగినది మరియు చేరుకోలేనిది . ఒక వస్తువు చేరుకోగలిగితే ఎలా గుర్తించాలి? ఇదంతా కేవలం తెలివిగలది. ఒక ఆబ్జెక్ట్‌ని మరొక రీచ్‌బుల్ ఆబ్జెక్ట్ రిఫరెన్స్ చేస్తే రీచ్ అవుతుంది. అందువలన, మనకు "చైన్ ఆఫ్ రీచబిలిటీ" లభిస్తుంది. ఇది ప్రోగ్రామ్ ప్రారంభమైనప్పుడు ప్రారంభమవుతుంది మరియు ప్రోగ్రామ్ వ్యవధి వరకు కొనసాగుతుంది. ఇది ఇలా కనిపిస్తుంది: చెత్త కలెక్టర్ గురించి మరింత - 3 చిత్రంలో ఉన్న బాణం మా ప్రోగ్రామ్ యొక్క ఎక్జిక్యూటబుల్ కోడ్‌ని సూచిస్తుంది. కోడ్ (ఉదాహరణకు, main()పద్ధతి) వస్తువులకు సూచనలను సృష్టిస్తుంది. ఈ వస్తువులు ఇతర వస్తువులను సూచించగలవు, ఆ వస్తువులు ఇంకా ఇతరులకు మొదలైనవి. ఇది సూచన గొలుసును ఏర్పరుస్తుంది. మీరు ఒక వస్తువు నుండి "రూట్ రిఫరెన్స్" (నేరుగా ఎక్జిక్యూటబుల్ కోడ్‌లో సృష్టించబడినది) వరకు గొలుసును గుర్తించగలిగితే, అది చేరుకోదగినదిగా పరిగణించబడుతుంది. అటువంటి వస్తువులు చిత్రంలో నల్లగా గుర్తించబడతాయి. కానీ ఈ గొలుసు నుండి ఆబ్జెక్ట్ పడిపోతే ఆ వస్తువు చేరుకోదు, అంటే ప్రస్తుతం అమలులో ఉన్న కోడ్‌లోని వేరియబుల్స్ ఏవీ దానిని సూచించవు మరియు దానిని "రిఫరెన్స్ చైన్" ద్వారా చేరుకోలేము. మా ప్రోగ్రామ్‌లో, అలాంటి రెండు వస్తువులు ఎరుపు రంగులో గుర్తించబడ్డాయి. ఈ "ఎరుపు" వస్తువులు ఒకదానికొకటి సూచనలను కలిగి ఉన్నాయని గమనించండి. కానీ మేము ముందుగా చెప్పినట్లుగా, జావా యొక్క ఆధునిక చెత్త కలెక్టర్ సూచనలను లెక్కించదు. ఇది ఒక వస్తువు చేరుకోగలదా లేదా చేరుకోలేనిది అని నిర్ణయిస్తుంది. ఫలితంగా, ఇది చిత్రంలో ఉన్న రెండు ఎరుపు వస్తువులను స్వాధీనం చేసుకుంటుంది. ఇప్పుడు మొత్తం ప్రక్రియను మొదటి నుండి చివరి వరకు చూద్దాం. అలా చేయడం ద్వారా, జావాలో మెమరీ ఎలా అమర్చబడిందో కూడా మనం చూస్తాము :) అన్ని జావా వస్తువులు హీప్ అనే ప్రత్యేక మెమరీ ప్రాంతంలో నిల్వ చేయబడతాయి . రోజువారీ భాషలో, కుప్ప అనేది సాధారణంగా వస్తువుల పర్వతం, ఇక్కడ ప్రతిదీ మిళితం అవుతుంది. అయితే జావాలో కుప్పం అంటే అది కాదు. దీని నిర్మాణం చాలా తార్కికం మరియు సహేతుకమైనది. ఏదో ఒక సమయంలో, జావా ప్రోగ్రామర్లు తమ వస్తువులన్నింటినీ రెండు రకాలుగా విభజించవచ్చని కనుగొన్నారు: సాధారణ వస్తువులు మరియు "దీర్ఘకాలిక వస్తువులు".. "దీర్ఘకాలిక వస్తువులు" అనేక రౌండ్ల చెత్త సేకరణ నుండి బయటపడిన వస్తువులు. కార్యక్రమం ముగిసే వరకు వారు సాధారణంగా నివసిస్తున్నారు. చివరికి, అన్ని వస్తువులు నిల్వ చేయబడిన పూర్తి కుప్ప అనేక భాగాలుగా విభజించబడింది. మొదటి భాగానికి అందమైన పేరు ఉంది: ఈడెన్(బైబిల్ "గార్డెన్ ఆఫ్ ఈడెన్" నుండి). ఈ పేరు తగినది, ఎందుకంటే వస్తువులు సృష్టించబడిన తర్వాత ఇక్కడే ముగుస్తుంది. ఇది మనం కొత్త కీవర్డ్‌ని ఉపయోగించినప్పుడు కొత్త వస్తువులు సృష్టించబడే మెమరీ భాగం. చాలా వస్తువులు సృష్టించబడవచ్చు. ఈ ప్రాంతంలో స్థలం ఖాళీ అయినప్పుడు, ప్రారంభ "వేగవంతమైన" చెత్త సేకరణ ప్రారంభమవుతుంది. చెత్త సేకరించేవాడు చాలా తెలివైనవాడని మనం చెప్పాలి. కుప్పలో ఎక్కువ చెత్త ఉందా లేదా ఎక్కువ ప్రత్యక్ష వస్తువులు ఉన్నాయా అనే దాని ఆధారంగా ఇది అల్గారిథమ్‌ను ఎంచుకుంటుంది. దాదాపు అన్ని వస్తువులు చెత్తగా ఉంటే, కలెక్టర్ ప్రత్యక్ష వస్తువులను గుర్తించి, వాటిని మరొక మెమరీ ప్రాంతానికి తరలిస్తారు. అప్పుడు ప్రస్తుత ప్రాంతం పూర్తిగా క్లియర్ చేయబడింది. చెత్త ఎక్కువగా లేకపోయినా, కుప్పలో ఎక్కువగా సజీవ వస్తువులు ఉంటే, కలెక్టర్ చెత్తను గుర్తించి, క్లియర్ చేసి, ఇతర వస్తువులను ప్యాక్ చేస్తారు. మేము చెప్పాము"ఒక మనుగడ స్థలం . మనుగడ స్థలం , క్రమంగా, తరాలుగా విభజించబడింది . ప్రతి వస్తువు ఒక నిర్దిష్ట తరానికి చెందినది, అది ఎన్ని రౌండ్ల చెత్త సేకరణను కలిగి ఉంది అనే దానిపై ఆధారపడి ఉంటుంది. ఒక వస్తువు ఒక రౌండ్ చెత్త సేకరణ నుండి బయటపడినట్లయితే, అది "జనరేషన్ 1"లో ఉంటుంది; 5 అయితే, "తరం 5". ఈడెన్ మరియు సర్వైవల్ స్పేస్ కలిసి యువ తరం అని పిలువబడే ప్రాంతాన్ని ఏర్పరుస్తాయి . యువ తరంతో పాటు, కుప్ప పాత తరం అని పిలువబడే మరొక జ్ఞాపకశక్తిని కలిగి ఉంది. అనేక రౌండ్ల చెత్త సేకరణలో ఎక్కువ కాలం జీవించిన వస్తువులు ముగిసే ప్రాంతం ఇది. వాటిని అన్నింటి నుండి వేరుగా ఉంచడం వల్ల ప్రయోజనాలు ఉన్నాయి. పాత తరం నిండినప్పుడు మాత్రమే పూర్తి చెత్త సేకరణ జరుగుతుంది, అనగా ప్రోగ్రామ్‌లో చాలా కాలం జీవించే వస్తువులు ఉన్నాయి, తగినంత మెమరీ లేదు. ఈ ప్రక్రియలో ఒకటి కంటే ఎక్కువ మెమరీ ప్రాంతాలు ఉంటాయి. సాధారణంగా, ఇది జావా యంత్రం సృష్టించిన అన్ని వస్తువులను కలిగి ఉంటుంది. సహజంగానే, ఇది చాలా ఎక్కువ సమయం మరియు వనరులను తీసుకుంటుంది. ఇది ఖచ్చితంగా దీర్ఘకాల వస్తువులను విడిగా నిల్వ చేయడానికి నిర్ణయం తీసుకోబడింది. ఇతర ప్రాంతాలలో స్థలం లేనప్పుడు "త్వరిత చెత్త సేకరణ" నిర్వహించబడుతుంది. ఇది ఒక ప్రాంతాన్ని మాత్రమే కలిగి ఉంటుంది, ఇది వేగంగా మరియు మరింత సమర్థవంతంగా చేస్తుంది. చివరగా, దీర్ఘకాలం ఉండే వస్తువుల ప్రాంతం కూడా పూర్తిగా నిండినప్పుడు, పూర్తి చెత్త సేకరణ ప్రారంభించబడింది. అందువల్ల, కలెక్టర్ దానిని నివారించడం అసాధ్యం అయినప్పుడు మాత్రమే "భారీ" సాధనాన్ని ఉపయోగిస్తాడు. కుప్ప నిర్మాణం మరియు చెత్త సేకరణ యొక్క దృశ్యమాన ప్రాతినిధ్యం ఇక్కడ ఉంది: చెత్త కలెక్టర్ గురించి మరింత - 4
వ్యాఖ్యలు
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION