7

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

मैं समझता हूं कि एआरसी एक जटिल प्रक्रिया बन सकता है, लेकिन आधुनिक कचरा कलेक्टरों की जटिलता के साथ ऐसा लगता है कि यह एआरसी लागू करने के लिए और अधिक जटिल नहीं होगा। हालांकि, स्मृति प्रबंधन के लिए जीसी का उपयोग करके कई भाषाएं और ढांचे हैं, और यहां तक ​​कि गो भाषा, जो सिस्टम प्रोग्रामिंग को लक्षित करती है, जीसी का उपयोग करती है।

मैं वास्तव में समझ नहीं पा रहा हूं कि क्यों जीसी एआरसी के लिए बेहतर होगा। क्या मुझसे कोई चूक हो रही है?

उत्तर

20

यहां शामिल ट्रेडऑफ का एक गुच्छा है, यह एक जटिल विषय है। यहाँ बड़ा लोगों हालांकि:

जीसी पेशेवरों:

  • कचरा कलेक्टरों ट्रेसिंग वस्तु रेखांकन में चक्र संभाल कर सकते हैं। स्वचालित संदर्भ गिनती तब तक स्मृति को रिसाव कर देगी जब तक किसी संदर्भ को हटाकर या ग्राफ के किनारे को कमजोर होना चाहिए, चक्र को मैन्युअल रूप से तोड़ दिया जाता है। रेफरेंस गिनती ऐप्स में अभ्यास में यह एक आम समस्या है।
  • कचरा कलेक्टरों का पता लगाना संदर्भ गणना के मुकाबले वास्तव में तेजी से (थ्रूपुट के मामले में) हो सकता है, काम को व्यवस्थित करके, काम को खारिज करके, और हॉट लूप में संदर्भ संख्याओं को छूने के लिए कैश को गड़बड़ न करके।
  • प्रतिलिपि बनाई जा रही कलेक्टरों ढेर संकुचित कर सकते हैं, खंडित पृष्ठों सुधारने पदचिह्न

एआरसी पेशेवरों को कम करने:

  • क्योंकि वस्तु विनाश तुरंत होता है जब संदर्भ गिनती हिट 0, वस्तु जीवन काल का प्रबंधन करने के लिए इस्तेमाल किया जा सकता है गैर स्मृति संसाधन। कचरा संग्रह के साथ, जीवनकाल गैर-निर्धारक हैं, इसलिए यह सुरक्षित नहीं है।
  • संग्रह काम आमतौर पर अधिक फैला हुआ है, बहुत कम रुक जाता है, जिसके परिणामस्वरूप क्योंकि स्मृति तुल्यकालिक एकत्र किया जाता है
  • (यदि आप वस्तुओं की एक बड़ी subgraph पुनःआवंटन एक विराम पाने के लिए संभव अभी भी है), यह "कलेक्टर को मात दे पाना संभव नहीं है "इसे साफ करने से तेज आवंटित करके। यह विशेष रूप से महत्वपूर्ण है जब वीएम पेजिंग खेल में आती है, क्योंकि वहां खराब होने वाले मामले हैं जहां जीसी थ्रेड एक पेज को हिट करता है जिसे बाहर निकाल दिया गया है, और बहुत पीछे आता है।
  • एक संबंधित नोट पर, कचरा कलेक्टरों अनुरेखण संपूर्ण वस्तु ग्राफ है, जो अनावश्यक पेज-इन बलों चलना पड़ता है (वहाँ इस तरह https://people.cs.umass.edu/~emery/pubs/f034-hertz.pdf के लिए mitigations हैं, लेकिन वे व्यापक रूप से तैनात नहीं कर रहे हैं)
  • ट्रेसिंग कचरा कलेक्टरों आम तौर पर की जरूरत है अधिक "खरोंच अंतरिक्ष" संदर्भ गिनती की तुलना में वे अपनी पूरी throughput हिट करने के लिए चाहते हैं, तो

इस पर मेरा व्यक्तिगत ले यह है कि केवल दो अंक कि वास्तव में बात ज्यादातर मामलों के लिए हैं:

  • एआरसी चक्र एकत्रित नहीं करता
  • जीसी नियतात्मक जीवन काल

मुझे लगता है कि इन मुद्दों के दोनों सौदा तोड़ने वाले हैं नहीं है, लेकिन एक बेहतर विचार के अभाव में, तुम बस लेने के लिए है जो भयावह समस्या आपके लिए बदतर लगती है।

+1

जीसी बनाम संदर्भ गिनती की एक सामान्य वैचारिक तुलना के लिए, यह पत्र, "कचरा संग्रह का एक एकीकृत सिद्धांत" दिखाता है कि उन्हें एक-दूसरे के सख्त दोहरे के रूप में कैसे देखा जा सकता है। प्रत्येक दृष्टिकोण के लिए विभिन्न अनुकूलन और बदलाव आपको बस एक स्पेक्ट्रम के साथ ले जाते हैं जो उन्हें जोड़ता है: https://www.cs.virginia.edu/~cs415/reading/bacon-garbage.pdf – algal

+0

ओह, हाँ, मुझे वह पेपर पसंद है: डी इसे जोड़ने के लिए धन्यवाद –

संबंधित मुद्दे