कम ठहराव GC के पीछे एल्गोरिदम क्या हैं?


12

कुछ भाषाओं में, जावा के लिए, एक कम ठहराव GC शुरू किया।

वे जीसी पूरी दुनिया को रोक दिए बिना अधिकांश काम कर सकते हैं। यह स्पष्ट रूप से एक काफी कठिन समस्या है क्योंकि इसे स्मृति का विश्लेषण करने की आवश्यकता होती है जब थ्रेड इसे संशोधित कर रहा होता है, जिसके परिणामस्वरूप डेटा का उपयोग प्रक्रिया की भीख में किया जा सकता है और अब समाप्त होने पर नहीं किया जा सकता है, या डेटा जो कि गैरेज प्रतीत होता है लेकिन क्योंकि संदर्भ को स्मृति में स्थानांतरित कर दिया गया था और कभी नहीं दिखाई दिया जहां जीसी देख रहे थे।

तो मूल रूप से, इसके पीछे एल्गोरिथ्म क्या है?

शोध पत्र या वास्तव में तकनीकी लेख के लिंक को मान्य उत्तर माना जाएगा, क्योंकि यह विषय वास्तव में तकनीकी है।

जवाबों:


16

5

जहां तक ​​मैं समझता हूं, जावा जी 1 कचरा कलेक्टर तथाकथित ढेर क्षेत्रों का उपयोग करता है ताकि पूरी दुनिया को रोका जा सके। जिस तरह से मैं देख रहा हूं वह यह है कि जहां एक क्षेत्र जीसी द्वारा क्लीनअप कर रहा है, वहीं मेमोरी आवंटन दूसरे क्षेत्र में किया जाता है।

यहाँ जेरेमी मैनसन से एक स्पष्टीकरण है :

सिद्धांत सरल है: कलेक्टर ढेर को निर्धारित आकार के क्षेत्रों में विभाजित करता है और उन क्षेत्रों में लाइव डेटा को ट्रैक करता है। यह पॉइंटर्स का एक सेट रखता है - "रिमेड सेट" - इस क्षेत्र से बाहर और अंदर। जब एक जीसी आवश्यक समझा जाता है, तो यह पहले कम लाइव डेटा वाले क्षेत्रों को इकट्ठा करता है (इसलिए, "कचरा पहले")। अक्सर, इसका मतलब एक क्षेत्र में एक पूरे क्षेत्र को इकट्ठा करना हो सकता है: यदि किसी क्षेत्र में संकेत की संख्या शून्य है, तो उसे उस क्षेत्र के चिह्न या स्वीप करने की आवश्यकता नहीं है ...


5

आईबीएम का वास्तविक समय जेवीएम मेट्रोनोम नामक एक कचरा संग्राहक का उपयोग करता है जो जीसी गतिविधि को असतत क्वांटा में विभाजित करता है और उन्हें अनुप्रयोग प्रसंस्करण के साथ इंटरलेक्ट करता है। इसलिए मूल रूप से आवधिक (और गैर-नियतात्मक) स्टॉप-द-वर्ल्ड जीसी रोक के बजाय, आवेदन इसके बजाय थोड़ा धीमा चलता है जबकि जीसी समानांतर में किया जाता है।

एक और GC है जो डायनेमिक डीफ़्रैग्मेन्टेशन करता है और हार्ड-रियलटाइम आवश्यकताओं को पूरा करता है, लेकिन एकमात्र संदर्भ जो मुझे मिल सकता है वह यहां है (ACM सदस्यता की आवश्यकता है)।

एक दिलचस्प समवर्ती वास्तविक समय कचरा कलेक्टर स्टॉपलेस है । यह पारंपरिक मार्क-एंड-स्वीप दृष्टिकोण का उपयोग करता है, लेकिन मल्टीप्रोसेसर सिस्टम पर उपयोग के लिए डिज़ाइन किया गया है और लॉक-फ्री समवर्ती मल्टीथ्रेडिंग का समर्थन करता है।


अच्छा लगा! बहुत बुरा मैं ACM तक पहुँच नहीं है, यह लेख वास्तव में दिलचस्प लग रहा है।
deadalnix

2

कारण यह है कि यह काम करता है क्योंकि जावा में, केवल GC ही मेमोरी को मुक्त कर सकता है जिसमें GC संदर्भ हो सकते हैं। इसका मतलब है कि जब तक आप वस्तुओं को एक अलग धागे में सुरक्षित रूप से पढ़ सकते हैं, तब तक आपको केवल स्टैक पर संदर्भों का निरीक्षण करने के लिए कार्यक्रम को रोकना होगा।

मैं म्यूटेशन के लिए सुझाव दूंगा कि वे परिवर्तन के बारे में जीसी को सूचित करने के लिए कॉपी-ऑन-राइट के कुछ रूप को लागू करें।


यह पर्याप्त नहीं है क्योंकि जब तक किसी भी थ्रेड द्वारा थ्रेड्स रेफरेंस को अपडेट किया जा सकता है।
deadalnix
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.