సీరియల్ GC
చెత్త సేకరణ జావాలో జ్ఞాపకశక్తి సామర్థ్యాన్ని మెరుగుపరుస్తుంది, కుప్ప నుండి ప్రస్తావించని వస్తువులను తీసివేసి, కొత్తగా సృష్టించిన వస్తువులకు చోటు కల్పిస్తుంది.
జావా వర్చువల్ మెషీన్లో ఎనిమిది రకాల చెత్త కలెక్టర్లు ఉన్నాయి. వాటిలో ప్రతి ఒక్కటి వివరంగా పరిశీలిద్దాం.
సీరియల్ GC అనేది సరళమైన GC అమలు. ఇది సింగిల్-థ్రెడ్ ఎన్విరాన్మెంట్లలో రన్ అయ్యే చిన్న అప్లికేషన్ల కోసం ఉద్దేశించబడింది. అన్ని చెత్త సేకరణ ఈవెంట్లు ఒకే థ్రెడ్లో వరుసగా అమలు చేయబడతాయి. ప్రతి చెత్త సేకరణ తర్వాత సంపీడనం నిర్వహిస్తారు.
![సీరియల్ GC](https://cdn.codegym.cc/images/article/3cbe67b6-3553-40cf-90a8-6df5080f300f/1024.jpeg)
కలెక్టర్ను అమలు చేయడం వలన "వరల్డ్ స్టాప్" ఈవెంట్కు దారి తీస్తుంది, ఇక్కడ మొత్తం అప్లికేషన్ నిలిపివేయబడుతుంది. చెత్త సేకరణ సమయంలో మొత్తం అప్లికేషన్ స్తంభింపజేయబడినందున, మీరు ఆలస్యాన్ని వీలైనంత తక్కువగా ఉంచాలనుకుంటే నిజ జీవితంలో దీన్ని ఆశ్రయించకూడదు.
సీరియల్ గార్బేజ్ కలెక్టర్ని ఉపయోగించడానికి JVM వాదన -XX:+UseSerialGC .
సమాంతర GC
సమాంతర చెత్త కలెక్టర్ మల్టీథ్రెడ్ లేదా మల్టీప్రాసెసర్ హార్డ్వేర్పై పనిచేసే మీడియం నుండి పెద్ద డేటా సెట్లతో అప్లికేషన్ల కోసం రూపొందించబడింది. ఇది డిఫాల్ట్ GC అమలు మరియు దీనిని నిర్గమాంశ కలెక్టర్ అని కూడా అంటారు.
యువ తరంలో చిన్న చెత్త సేకరణ కోసం అనేక దారాలు ఉద్దేశించబడ్డాయి. పాత తరంలో ప్రధాన చెత్త సేకరణతో మాత్రమే థ్రెడ్ బిజీగా ఉంది.
![సమాంతర GC](https://cdn.codegym.cc/images/article/9253feb3-a0e1-4ef0-9696-25926c18df42/1024.jpeg)
సమాంతర GCని అమలు చేయడం వలన ప్రపంచం "ఆగిపోతుంది" మరియు అప్లికేషన్ హ్యాంగ్ అవుతుంది. ఈ ప్రవర్తన బహుళ-థ్రెడ్ వాతావరణం కోసం చాలా సముచితమైనది, ఇక్కడ అనేక పనులు పూర్తి కావాలి మరియు బ్యాచ్ జాబ్ను అమలు చేస్తున్నప్పుడు వంటి సుదీర్ఘ విరామాలు ఆమోదయోగ్యంగా ఉంటాయి.
సమాంతర చెత్త కలెక్టర్ని ఉపయోగించడానికి JVM వాదన -XX:+UseParallelGC .
CMS GC
మాకు తక్కువ విశ్రాంతి సమాంతర పికర్ అని కూడా పిలుస్తారు .
ఇక్కడ, ఒక చిన్న చెత్త సేకరణ కోసం, అనేక థ్రెడ్లు పాల్గొంటాయి, ఇది సమాంతర కలెక్టర్లో అదే అల్గోరిథం ద్వారా జరుగుతుంది. ప్రధాన చెత్త సేకరణ పాత సమాంతర GC వలె బహుళ-థ్రెడ్గా ఉంటుంది, అయితే CMS "వరల్డ్ స్టాప్" ఈవెంట్లను తగ్గించడానికి అప్లికేషన్ ప్రాసెస్లతో ఏకకాలంలో నడుస్తుంది.
![CMS GC](https://cdn.codegym.cc/images/article/ba41fb23-bd47-4051-8264-a95a9c9849ad/1024.jpeg)
దీని కారణంగా, CMS కలెక్టర్ ఇతర కలెక్టర్ల కంటే ఎక్కువ CPUని వినియోగిస్తుంది. పనితీరును మెరుగుపరచడానికి మీరు మరింత CPUని కేటాయించగల సామర్థ్యాన్ని కలిగి ఉంటే, అప్పుడు సాధారణ సమాంతర కలెక్టర్ కంటే CMS ఉత్తమం. CMS GC కాంపాక్ట్ కాదు.
సమాంతర మార్క్-స్వీప్ గార్బేజ్ కలెక్టర్ని ఉపయోగించడానికి JVM వాదన -XX:+UseConcMarkSweepGC .
G1 (చెత్త మొదట) GC
G1GC CMSకి ప్రత్యామ్నాయంగా రూపొందించబడింది మరియు పెద్ద కుప్ప పరిమాణాలు (4 GB కంటే ఎక్కువ) కలిగి ఉండే బహుళ-థ్రెడ్ అప్లికేషన్ల కోసం అభివృద్ధి చేయబడింది. ఇది CMS లాగా సమాంతరంగా మరియు పోటీగా ఉంటుంది, కానీ హుడ్ కింద ఇది పాత చెత్త సేకరించేవారి కంటే చాలా భిన్నంగా పని చేస్తుంది.
G1 కూడా తరాల ప్రాతిపదికన పనిచేస్తున్నప్పటికీ, దీనికి యువ మరియు పాత తరాలకు ప్రత్యేక ఖాళీలు లేవు. బదులుగా, ప్రతి తరం ప్రాంతాల సమితి, ఇది యువ తరం యొక్క పరిమాణాన్ని మార్చడంలో సౌలభ్యాన్ని అనుమతిస్తుంది.
G1 కుప్పను సమాన పరిమాణంలో ఉన్న ప్రాంతాల సమితిగా విభజిస్తుంది (కుప్ప పరిమాణంపై ఆధారపడి) మరియు వాటిని బహుళ థ్రెడ్లుగా స్కాన్ చేస్తుంది. ప్రోగ్రామ్ అమలు సమయంలో ఉన్న ప్రాంతం పదేపదే పాత మరియు యువకులుగా మారవచ్చు.
మార్కప్ దశ పూర్తయిన తర్వాత, G1కి ఏయే ప్రాంతాల్లో ఎక్కువ జంక్ ఉందో తెలుసు. వినియోగదారు పాజ్లను కనిష్టీకరించడానికి ఆసక్తి కలిగి ఉంటే, G1 కొన్ని ప్రాంతాలను మాత్రమే ఎంచుకోగలదు. పాజ్ సమయం వినియోగదారుకు ముఖ్యమైనది కానట్లయితే లేదా పాజ్ సమయ పరిమితిని ఎక్కువగా సెట్ చేసినట్లయితే, G1 మరిన్ని ప్రాంతాలకు వెళుతుంది.
G1 GC అత్యధిక చెత్త ఉన్న ప్రాంతాలను గుర్తించి, ఆ ప్రాంతాలలో ముందుగా చెత్త సేకరణను నిర్వహిస్తుంది కాబట్టి, దీనిని "గార్బేజ్ ఫస్ట్" అంటారు.
![](https://cdn.codegym.cc/images/article/a2c26fd4-2e6b-4d2c-a646-473db59d44a6/800.jpeg)
ఈడెన్, సర్వైవర్స్ మరియు ఓల్డ్ మెమరీ ప్రాంతాలతో పాటు, G1GCలో మరో రెండు రకాలు ఉన్నాయి.
- హ్యూమంగస్ (భారీ) - పెద్ద పరిమాణంలోని వస్తువుల కోసం (కుప్ప పరిమాణంలో 50% కంటే ఎక్కువ).
- అందుబాటులో ఉంది - ఉపయోగించని లేదా కేటాయించని స్థలం.
G1 చెత్త కలెక్టర్ని ఉపయోగించడానికి JVM వాదన -XX:+UseG1GC .
షెనాండోహ్ (షాందార)
Shenandoah అనేది JDK 12లో భాగంగా విడుదల చేయబడిన కొత్త GC. G1 కంటే Shenandoah యొక్క ముఖ్య ప్రయోజనం ఏమిటంటే, చెత్త సేకరణ చక్రంలో ఎక్కువ భాగం అప్లికేషన్ థ్రెడ్లతో ఏకకాలంలో జరుగుతుంది. అప్లికేషన్ సస్పెండ్ చేయబడినప్పుడు మాత్రమే G1 కుప్ప ప్రాంతాలను ఖాళీ చేయగలదు, అయితే Shenandoah అప్లికేషన్ ఉన్న సమయంలోనే వస్తువులను తరలిస్తుంది.
షెనాండో లైవ్ ఆబ్జెక్ట్లను కుదించగలదు, చెత్తను శుభ్రం చేయగలదు మరియు ఉచిత మెమరీని కనుగొన్న వెంటనే RAMని ఖాళీ చేయగలదు. ఇవన్నీ ఒకే సమయంలో జరుగుతాయి కాబట్టి, అప్లికేషన్ను సస్పెండ్ చేయకుండానే, Shenandoah మరింత CPU ఇంటెన్సివ్గా ఉంటుంది.
ZGC
ZGC అనేది JDK 11లో భాగంగా విడుదలైన మరొక GC మరియు JDK 12లో మెరుగుపరచబడింది.
ఇది వేగం మరియు తక్కువ జాప్యం (10 ms కంటే తక్కువ పాజ్లు) మరియు/లేదా చాలా పెద్ద హీప్ (అనేక టెరాబైట్లు) అవసరమయ్యే అప్లికేషన్ల కోసం ఉద్దేశించబడింది.
ZGC యొక్క ప్రధాన లక్ష్యాలు తక్కువ జాప్యం, స్కేలబిలిటీ మరియు వాడుకలో సౌలభ్యం. దీన్ని చేయడానికి, చెత్త సేకరణ కార్యకలాపాలు కొనసాగుతున్నప్పటికీ జావా అప్లికేషన్ను అమలు చేయడం కొనసాగించడానికి ఇది అనుమతిస్తుంది. డిఫాల్ట్గా, ZGC ఉపయోగించని మెమరీని విడుదల చేస్తుంది మరియు దానిని ఆపరేటింగ్ సిస్టమ్కు తిరిగి ఇస్తుంది.
అందువల్ల, ZGC చాలా తక్కువ డెడ్ టైమ్లను అందించడం ద్వారా ఇతర సాంప్రదాయ GCల కంటే గణనీయమైన మెరుగుదలను తెస్తుంది (సాధారణంగా 2ms లోపల).
![ZGC యొక్క ప్రధాన లక్ష్యాలు](https://cdn.codegym.cc/images/article/3ca77686-5b92-46ad-ab67-f8623caa9c71/512.jpeg)
ZGC చెత్త కలెక్టర్ని ఉపయోగించడానికి JVM వాదన -XX:+అన్లాక్ ఎక్స్పెరిమెంటల్VMOptions -XX:+UseZGC .