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

कलेक्टर चालवल्याने "वर्ल्ड स्टॉप" इव्हेंटमध्ये परिणाम होतो, जेथे संपूर्ण अर्ज निलंबित केला जातो. कचरा गोळा करताना संपूर्ण ऍप्लिकेशन गोठलेले असल्याने, जर तुम्हाला विलंब शक्य तितका कमी ठेवायचा असेल तर तुम्ही वास्तविक जीवनात याचा अवलंब करू नये.
सीरियल गार्बेज कलेक्टर वापरण्यासाठी JVM युक्तिवाद आहे -XX:+UseSerialGC .
समांतर GC
समांतर कचरा कलेक्टर हे मध्यम ते मोठ्या डेटा संच असलेल्या अनुप्रयोगांसाठी डिझाइन केले आहे जे मल्टीथ्रेडेड किंवा मल्टीप्रोसेसर हार्डवेअरवर चालतात. हे डीफॉल्ट GC अंमलबजावणी आहे आणि थ्रुपुट कलेक्टर म्हणून देखील ओळखले जाते.
तरुण पिढीमध्ये लहान कचरा गोळा करण्यासाठी अनेक धागे निश्चित केले आहेत. जुन्या पिढीतील मुख्य कचरा संकलनात एकच धागा व्यस्त आहे.

समांतर GC चालवल्याने जग "थांबते" आणि अनुप्रयोग हँग होतो. हे वर्तन बहु-थ्रेडेड वातावरणासाठी अधिक योग्य आहे जेथे अनेक कार्ये पूर्ण करणे आवश्यक आहे आणि दीर्घ विराम स्वीकार्य आहेत, जसे की बॅच जॉब चालवताना.
समांतर कचरा कलेक्टर वापरण्यासाठी JVM युक्तिवाद आहे -XX:+UseParallelGC .
CMS GC
आम्हाला कमी विश्रांती समांतर पिकर म्हणून देखील ओळखले जाते .
येथे, एका लहान कचरा संकलनासाठी, अनेक धागे गुंतलेले आहेत, हे समांतर कलेक्टर प्रमाणेच अल्गोरिदमद्वारे होते. जुन्या समांतर GC प्रमाणेच मुख्य कचरा संकलन मल्टी-थ्रेडेड आहे, परंतु CMS "वर्ल्ड स्टॉप" इव्हेंट्स कमी करण्यासाठी ऍप्लिकेशन प्रक्रियेसह एकाच वेळी चालते.

यामुळे, सीएमएस कलेक्टर इतर कलेक्टर्सपेक्षा जास्त सीपीयू वापरतो. कार्यप्रदर्शन सुधारण्यासाठी तुमच्याकडे अधिक CPU वाटप करण्याची क्षमता असल्यास, साध्या समांतर कलेक्टरपेक्षा CMS श्रेयस्कर आहे. CMS GC कॉम्पॅक्ट होत नाही.
समांतर मार्क-स्वीप गार्बेज कलेक्टर वापरण्यासाठी JVM युक्तिवाद आहे -XX:+UseConcMarkSweepGC .
G1 (कचरा प्रथम) GC
G1GC ची संकल्पना CMS साठी बदली म्हणून करण्यात आली होती आणि बहु-थ्रेडेड ऍप्लिकेशन्ससाठी विकसित केली गेली होती जी मोठ्या ढीग आकारांनी (4 GB पेक्षा जास्त) वैशिष्ट्यीकृत आहेत. हे CMS सारखे समांतर आणि स्पर्धात्मक आहे, परंतु हुड अंतर्गत ते जुन्या कचरा गोळा करणाऱ्यांपेक्षा खूप वेगळ्या पद्धतीने कार्य करते.
G1 सुद्धा पिढ्यानुरूप चालत असला तरी, त्यात तरुण आणि जुन्या पिढ्यांसाठी वेगळी जागा नाही. त्याऐवजी, प्रत्येक पिढी हा प्रदेशांचा एक संच असतो, ज्यामुळे तरुण पिढीचा आकार बदलण्यात लवचिकता येते.
G1 ढीग समान आकाराच्या प्रदेशांच्या संचामध्ये विभाजित करते (ढीगच्या आकारावर अवलंबून) आणि त्यांना एकाधिक थ्रेडमध्ये स्कॅन करते. कार्यक्रमाच्या अंमलबजावणीदरम्यानचे क्षेत्र वारंवार वृद्ध आणि तरुण दोन्ही होऊ शकते.
मार्कअप टप्पा पूर्ण झाल्यानंतर, G1 ला माहित आहे की कोणत्या भागात सर्वात जास्त जंक आहे. वापरकर्त्याला विराम कमी करण्यात स्वारस्य असल्यास, G1 फक्त काही क्षेत्रे निवडू शकतो. वापरकर्त्यासाठी विराम वेळ महत्त्वाची नसल्यास, किंवा विराम वेळ मर्यादा उच्च वर सेट केली असल्यास, G1 अधिक क्षेत्रांवर जाईल.
G1 GC सर्वात जास्त कचरा असलेले प्रदेश ओळखतो आणि त्या प्रदेशांवर प्रथम कचरा गोळा करतो, त्याला "कचरा प्रथम" असे म्हणतात.

ईडन, सर्व्हायव्हर्स आणि ओल्ड मेमरी या क्षेत्रांव्यतिरिक्त, G1GC मध्ये आणखी दोन प्रकार आहेत.
- Humongous (विशाल) - मोठ्या आकाराच्या वस्तूंसाठी (ढीग आकाराच्या 50% पेक्षा जास्त).
- उपलब्ध - न वापरलेली किंवा वाटप न केलेली जागा.
G1 गार्बेज कलेक्टर वापरण्यासाठी JVM युक्तिवाद आहे -XX:+UseG1GC .
शेनंदोह (शांदरा)
शेननडोह हे JDK 12 चा भाग म्हणून जारी केलेले नवीन GC आहे. G1 पेक्षा शेननडोहचा मुख्य फायदा असा आहे की बहुतेक कचरा संकलन चक्र अॅप्लिकेशन थ्रेडसह एकाच वेळी केले जाते. जेव्हा ऍप्लिकेशन निलंबित केले जाते तेव्हा G1 फक्त ढीग क्षेत्रे रिकामी करू शकते, तर Shenandoah ऍप्लिकेशन प्रमाणेच वस्तू हलवते.
शेननडोह थेट वस्तू कॉम्पॅक्ट करू शकतो, कचरा साफ करू शकतो आणि फ्री मेमरी मिळताच रॅम मोकळी करू शकतो. हे सर्व एकाच वेळी होत असल्याने, अनुप्रयोग निलंबित न करता, Shenandoah अधिक CPU गहन आहे.
ZGC
ZGC हे JDK 11 चा भाग म्हणून प्रसिद्ध झालेले आणि JDK 12 मध्ये सुधारलेले आणखी एक GC आहे.
हे अशा ऍप्लिकेशन्ससाठी आहे ज्यांना वेग आणि कमी विलंब (10 ms पेक्षा कमी विराम) आणि/किंवा खूप मोठा ढीग (अनेक टेराबाइट्स) वापरणे आवश्यक आहे.
ZGC ची मुख्य उद्दिष्टे कमी विलंबता, स्केलेबिलिटी आणि वापरणी सोपी आहेत. हे करण्यासाठी, हे जावा ऍप्लिकेशनला कचरा संकलन कार्य प्रगतीपथावर असूनही चालू ठेवण्यास अनुमती देते. डीफॉल्टनुसार, ZGC न वापरलेली मेमरी रिलीझ करते आणि ऑपरेटिंग सिस्टमवर परत करते.
अशा प्रकारे, ZGC इतर पारंपारिक GC च्या तुलनेत अत्यंत कमी डेड वेळा (सामान्यत: 2ms च्या आत) प्रदान करून लक्षणीय सुधारणा आणते.

ZGC कचरा कलेक्टर वापरण्यासाठी JVM युक्तिवाद आहे -XX:+UnlockExperimentalVMOptions -XX:+UseZGC .
GO TO FULL VERSION