सीरियल जीसी
कचरा संग्रह जावा में स्मृति दक्षता में सुधार करता है, ढेर से असंबद्ध वस्तुओं को हटाकर और नव निर्मित वस्तुओं के लिए जगह बनाता है।
जावा वर्चुअल मशीन में आठ प्रकार के कचरा संग्राहक होते हैं। आइए उनमें से प्रत्येक पर विस्तार से विचार करें।
सीरियल जीसी सबसे सरल जीसी कार्यान्वयन है। यह सिंगल-थ्रेडेड वातावरण में चल रहे छोटे अनुप्रयोगों के लिए अभिप्रेत है। सभी कचरा संग्रह की घटनाओं को एक ही धागे पर क्रमिक रूप से निष्पादित किया जाता है। प्रत्येक कचरा संग्रह के बाद संघनन किया जाता है।
संग्राहक को चलाने से "वर्ल्ड स्टॉप" घटना होती है, जहां संपूर्ण एप्लिकेशन निलंबित हो जाता है। चूंकि कचरा संग्रहण के दौरान संपूर्ण एप्लिकेशन जमी हुई है, इसलिए आपको वास्तविक जीवन में इसका सहारा नहीं लेना चाहिए, यदि आप विलंब को यथासंभव कम रखना चाहते हैं।
सीरियल कचरा संग्राहक का उपयोग करने के लिए JVM तर्क -XX:+UseSerialGC है ।
समानांतर जीसी
समानांतर कचरा संग्राहक को मध्यम से बड़े डेटा सेट वाले अनुप्रयोगों के लिए डिज़ाइन किया गया है जो मल्टीथ्रेडेड या मल्टीप्रोसेसर हार्डवेयर पर चलते हैं। यह डिफ़ॉल्ट जीसी कार्यान्वयन है और इसे थ्रूपुट कलेक्टर के रूप में भी जाना जाता है।
युवा पीढ़ी में छोटे-छोटे कचरा संग्रह के लिए कई धागे नसीब होते हैं। पुरानी पीढ़ी में मुख्य कचरा संग्रह के साथ एकमात्र धागा व्यस्त है।
एक समानांतर GC चलाने से भी दुनिया "रोक" जाती है और एप्लिकेशन हैंग हो जाता है। यह व्यवहार बहु-थ्रेडेड वातावरण के लिए अधिक उपयुक्त है, जहां कई कार्यों को पूरा करने की आवश्यकता होती है और लंबे समय तक रुकना स्वीकार्य होता है, जैसे बैच जॉब चलाते समय।
समांतर कचरा संग्राहक का उपयोग करने के लिए JVM तर्क -XX:+UseParallelGC है ।
सीएमएस जीसी
हमें लो रेस्ट पैरेलल पिकर के रूप में भी जाना जाता है ।
यहां, एक छोटे से कचरा संग्रह के लिए, कई धागे शामिल होते हैं, यह समानांतर संग्राहक के समान एल्गोरिदम के माध्यम से होता है। मुख्य कचरा संग्रह बहु-थ्रेडेड है, पुराने समानांतर जीसी की तरह, लेकिन सीएमएस "वर्ल्ड स्टॉप" घटनाओं को कम करने के लिए आवेदन प्रक्रियाओं के साथ-साथ चलता है।
इस वजह से, CMS कलेक्टर अन्य कलेक्टरों की तुलना में अधिक CPU की खपत करता है। यदि आपके पास प्रदर्शन में सुधार के लिए अधिक CPU आवंटित करने की क्षमता है, तो एक साधारण समांतर संग्राहक के लिए एक सीएमएस बेहतर है। सीएमएस जीसी कॉम्पैक्ट नहीं है।
समांतर मार्क-स्वीप कचरा कलेक्टर का उपयोग करने के लिए जेवीएम तर्क -XX:+UseConcMarkSweepGC है ।
G1 (कचरा पहले) GC
G1GC की कल्पना CMS के प्रतिस्थापन के रूप में की गई थी और इसे बहु-थ्रेडेड अनुप्रयोगों के लिए विकसित किया गया था जो बड़े हीप आकार (4 GB से अधिक) की विशेषता है। यह सीएमएस की तरह समानांतर और प्रतिस्पर्धी है, लेकिन हुड के तहत यह पुराने कचरा संग्राहकों की तुलना में बहुत अलग तरीके से काम करता है।
हालाँकि G1 पीढ़ीगत आधार पर भी काम करता है, लेकिन इसमें युवा और पुरानी पीढ़ियों के लिए अलग-अलग स्थान नहीं हैं। इसके बजाय, प्रत्येक पीढ़ी क्षेत्रों का एक समूह है, जो युवा पीढ़ी के आकार को बदलने में लचीलेपन की अनुमति देता है।
G1 ढेर को समान आकार के क्षेत्रों (ढेर के आकार के आधार पर) के एक सेट में विभाजित करता है और उन्हें कई धागों में स्कैन करता है। कार्यक्रम के निष्पादन के दौरान क्षेत्र बार-बार बूढ़ा और जवान दोनों बन सकता है।
मार्कअप चरण पूरा होने के बाद, G1 जानता है कि किन क्षेत्रों में सबसे अधिक कबाड़ है। यदि उपयोगकर्ता ठहराव को कम करने में रुचि रखता है, तो G1 केवल कुछ क्षेत्रों का चयन कर सकता है। यदि ठहराव का समय उपयोगकर्ता के लिए महत्वपूर्ण नहीं है, या यदि ठहराव की समय सीमा उच्च पर सेट है, तो G1 अधिक क्षेत्रों में जाएगा।
चूँकि G1 GC सबसे अधिक कचरा वाले क्षेत्रों की पहचान करता है और पहले उन क्षेत्रों पर कचरा संग्रह करता है, इसे "कचरा पहले" कहा जाता है।
ईडन, सर्वाइवर्स और ओल्ड मेमोरी के क्षेत्रों के अलावा, G1GC में दो अन्य प्रकार हैं।
- Humongous (विशाल) - बड़े आकार की वस्तुओं के लिए (ढेर आकार का 50% से अधिक)।
- उपलब्ध - अप्रयुक्त या अनाबंटित स्थान।
G1 कचरा संग्राहक का उपयोग करने के लिए JVM तर्क -XX:+UseG1GC है ।
शेनानडोह (शंदारा)
Shenandoah JDK 12 के हिस्से के रूप में जारी किया गया एक नया GC है। G1 पर Shenandoah का मुख्य लाभ यह है कि अधिकांश कचरा संग्रहण चक्र अनुप्रयोग थ्रेड्स के साथ समवर्ती रूप से किया जाता है। आवेदन के निलंबित होने पर G1 केवल ढेर क्षेत्रों को खाली कर सकता है, जबकि शेनान्डाह उसी समय वस्तुओं को स्थानांतरित करता है जब आवेदन किया जाता है।
Shenandoah लाइव ऑब्जेक्ट्स को कॉम्पैक्ट कर सकता है, कचरा साफ कर सकता है, और जैसे ही फ्री मेमोरी मिलती है, रैम को फ्री कर देता है। चूंकि यह सब एक ही समय में होता है, एप्लिकेशन को निलंबित किए बिना, शेनान्डाह अधिक सीपीयू गहन है।
ZGC
जेडजीसी जेडीके 11 के हिस्से के रूप में जारी एक और जीसी है और जेडीके 12 में सुधार हुआ है।
यह उन अनुप्रयोगों के लिए अभिप्रेत है जिनके लिए गति और कम विलंबता (10 एमएस से कम के ठहराव) की आवश्यकता होती है और/या बहुत बड़े हीप (कई टेराबाइट्स) का उपयोग करते हैं।
ZGC के मुख्य लक्ष्य कम विलंबता, मापनीयता और उपयोग में आसानी हैं। ऐसा करने के लिए, यह जावा एप्लिकेशन को इस तथ्य के बावजूद चलते रहने की अनुमति देता है कि कचरा संग्रहण कार्य प्रगति पर है। डिफ़ॉल्ट रूप से, ZGC अप्रयुक्त मेमोरी को रिलीज़ करता है और इसे ऑपरेटिंग सिस्टम पर लौटाता है।
इस प्रकार, जेडजीसी अत्यधिक कम मृत समय (आमतौर पर 2ms के भीतर) प्रदान करके अन्य पारंपरिक जीसी पर एक महत्वपूर्ण सुधार लाता है।
ZGC कचरा संग्राहक का उपयोग करने के लिए JVM तर्क -XX:+UnlockExperimentalVMOptions -XX:+UseZGC है ।
GO TO FULL VERSION