తరాల వస్తువులతో పని చేయడం
జావా చెత్త సేకరించేవారు వయస్సు ఆధారంగా వస్తువులను వర్గీకరించగల తరం చెత్త సేకరణ వ్యూహాన్ని అమలు చేస్తారు.
JVMలో ఇటువంటి అవసరాన్ని (అన్ని వస్తువులను గుర్తించడం మరియు కుదించడం) అసమర్థంగా పిలువబడుతుంది. పెద్ద సంఖ్యలో వస్తువులు కేటాయించబడినందున, వాటి జాబితా పెరుగుతుంది, ఇది చెత్త సేకరణ సమయం పెరుగుదలకు దారితీస్తుంది. అప్లికేషన్ల యొక్క అనుభావిక విశ్లేషణ జావాలోని చాలా వస్తువులు స్వల్పకాలికంగా ఉన్నాయని తేలింది.
JVMలోని హీప్ మెమరీ ప్రాంతం మూడు విభాగాలుగా విభజించబడింది:
యువ తరం
కొత్తగా సృష్టించబడిన వస్తువులు యువ తరంలో ప్రారంభమవుతాయి. యువ తరం రెండు వర్గాలుగా విభజించబడింది.
- ఈడెన్ స్పేస్ - అన్ని కొత్త వస్తువులు ఇక్కడ ప్రారంభమవుతాయి, అవి ప్రారంభ మెమరీని కేటాయించబడతాయి.
సర్వైవర్ స్పేసెస్ (FromSpace మరియు ToSpace) - ఒక చెత్త సేకరణ చక్రంలో మనుగడ సాగించిన తర్వాత వస్తువులు ఈడెన్ నుండి ఇక్కడికి తరలించబడతాయి.
యువ తరం నుండి సేకరించిన వస్తువులు చెత్తగా ఉండే ప్రక్రియను మైనర్ చెత్త సేకరణ కార్యక్రమం అంటారు.
ఈడెన్ స్థలం వస్తువులతో నిండినప్పుడు, ఒక చిన్న చెత్త సేకరణ నిర్వహిస్తారు. చనిపోయిన వస్తువులన్నీ తీసివేయబడతాయి మరియు మిగిలిన రెండు ప్రదేశాలలో ఒకదానికి అన్ని జీవులు తరలించబడతాయి. చిన్న GC కూడా సర్వైవర్ స్పేస్లోని వస్తువులను తనిఖీ చేస్తుంది మరియు వాటిని మరొక (తదుపరి) సర్వైవర్ స్పేస్కి తరలిస్తుంది.
కింది క్రమాన్ని ఉదాహరణగా తీసుకుందాం.
- ఈడెన్లో రెండు రకాల వస్తువులు (జీవించినవి మరియు చనిపోయినవి) ఉన్నాయి.
- ఒక చిన్న GC ఏర్పడుతుంది - అన్ని చనిపోయిన వస్తువులు ఈడెన్ నుండి తీసివేయబడతాయి. అన్ని సజీవ వస్తువులు స్పేస్-1 (FromSpace)కి తరలించబడతాయి. ఈడెన్ మరియు స్పేస్-2 ఇప్పుడు ఖాళీగా ఉన్నాయి.
- కొత్త వస్తువులు సృష్టించబడతాయి మరియు ఈడెన్కు జోడించబడతాయి. ఈడెన్ మరియు స్పేస్-1లోని కొన్ని వస్తువులు చనిపోతాయి.
- ఒక చిన్న GC ఏర్పడుతుంది - అన్ని చనిపోయిన వస్తువులు ఈడెన్ మరియు స్పేస్-1 నుండి తీసివేయబడతాయి. అన్ని సజీవ వస్తువులు స్పేస్-2 (టోస్పేస్)కి తరలించబడతాయి. ఈడెన్ మరియు స్పేస్-1 ఖాళీగా ఉన్నాయి.
అందువల్ల, ఏ సమయంలోనైనా, సర్వైవర్ స్పేస్లలో ఒకటి ఎల్లప్పుడూ ఖాళీగా ఉంటుంది. ప్రాణాలతో బయటపడినవారు జీవించి ఉన్న ప్రదేశాల ద్వారా వెళ్లడానికి ఒక నిర్దిష్ట స్థాయికి చేరుకున్నప్పుడు, వారు పాత తరానికి చేరుకుంటారు.
యువ తరం పరిమాణాన్ని సెట్ చేయడానికి మీరు -Xmn ఫ్లాగ్ని ఉపయోగించవచ్చు .
పాత తరం
గణనీయమైన సమయం జీవించే వస్తువులు (ఉదాహరణకు, ప్రోగ్రామ్ యొక్క జీవితకాలంలో ఎక్కువ భాగం) చివరికి పాత వస్తువులుగా మారతాయి - సెంటెనరియన్లు. ఇది సాధారణ తరం అని కూడా పిలువబడుతుంది మరియు సర్వైవర్ స్పేసెస్లో చాలా కాలంగా మిగిలిపోయిన వస్తువులను కలిగి ఉంటుంది.
ఒక వస్తువు యొక్క జీవితకాల థ్రెషోల్డ్ దానిని పాత తరానికి తరలించడానికి ముందు అది ఎన్ని చెత్త సేకరణ చక్రాల ద్వారా వెళ్ళాలి అని నిర్ణయిస్తుంది. పాత తరం నుండి వస్తువులను చెత్తకు పంపే ప్రక్రియను ప్రధాన చెత్త సేకరణ కార్యక్రమం అంటారు.
మీరు ప్రారంభ మరియు గరిష్ట హీప్ మెమరీ పరిమాణాన్ని సెట్ చేయడానికి -Xms మరియు -Xmx ఫ్లాగ్లను ఉపయోగించవచ్చు .
జావా తరతరాలుగా చెత్త సేకరణను ఉపయోగిస్తుంది కాబట్టి, ఒక వస్తువు ఎక్కువ చెత్త సేకరణ ఈవెంట్లను అనుభవిస్తుంది, అది కుప్పపై మరింత కదులుతుంది. అతను యువ తరంలో ప్రారంభిస్తాడు మరియు అతను చాలా కాలం జీవించినట్లయితే చివరికి సాధారణ తరంలో ముగుస్తాడు.
ఖాళీలు మరియు తరాల మధ్య వస్తువుల ప్రమోషన్ను అర్థం చేసుకోవడానికి, ఈ క్రింది ఉదాహరణను పరిగణించండి:
ఒక వస్తువు సృష్టించబడినప్పుడు, అది మొదట యువ తరం యొక్క ఈడెన్ స్పేస్లో ఉంచబడుతుంది.
చిన్న చెత్త సేకరణ జరిగిన వెంటనే, ఈడెన్ నుండి సజీవ వస్తువులు ఫ్రమ్స్పేస్కు తరలించబడతాయి. తదుపరి చిన్న చెత్త సేకరణ జరిగినప్పుడు, ఈడెన్ మరియు స్పేస్ రెండింటి నుండి సజీవ వస్తువులు ToSpaceకి తరలించబడతాయి.
ఈ చక్రం నిర్దిష్ట సంఖ్యలో కొనసాగుతుంది. ఈ పాయింట్ తర్వాత కూడా వస్తువు "సేవలో" ఉంటే, తదుపరి చెత్త సేకరణ చక్రం దానిని పాత తరం ప్రదేశానికి తరలిస్తుంది.
శాశ్వత తరం మరియు మెటాస్పేస్
తరగతులు మరియు పద్ధతులు వంటి మెటాడేటా నిరంతర ఉత్పత్తిలో నిల్వ చేయబడతాయి. అప్లికేషన్ ఉపయోగించే తరగతుల ఆధారంగా JVM దీన్ని రన్టైమ్లో నింపుతుంది. ఇకపై ఉపయోగించబడని తరగతులు శాశ్వత తరం నుండి చెత్తకు వెళ్ళవచ్చు.
శాశ్వత తరం యొక్క ప్రారంభ మరియు గరిష్ట పరిమాణాన్ని సెట్ చేయడానికి మీరు -XX:PermGen మరియు -XX:MaxPermGen ఫ్లాగ్లను ఉపయోగించవచ్చు .
మెటా స్పేస్
జావా 8 నుండి, PermGen స్థలం MetaSpace మెమరీ స్పేస్తో భర్తీ చేయబడింది. అమలు PermGen నుండి భిన్నంగా ఉంటుంది - ఈ హీప్ స్పేస్ ఇప్పుడు స్వయంచాలకంగా మార్చబడింది.
ఇది PermGen యొక్క హీప్ స్పేస్ యొక్క పరిమిత పరిమాణం కారణంగా సంభవించే అప్లికేషన్ యొక్క అవుట్-ఆఫ్-మెమరీ సమస్యను నివారిస్తుంది. మెటాస్పేస్ మెమరీ చెత్తను సేకరించవచ్చు మరియు మెటాస్పేస్ గరిష్ట పరిమాణానికి చేరుకున్నప్పుడు ఇకపై ఉపయోగంలో లేని తరగతులు స్వయంచాలకంగా శుభ్రం చేయబడతాయి.
GO TO FULL VERSION