त्वरित उत्तर यह है कि पर्ल 5 स्वचालित रूप से परिपत्र संदर्भों को संभालता है। जब तक आप अपने कोड में स्पष्ट उपाय नहीं करते हैं, तब तक आपके किसी भी डेटा संरचना जिसमें परिपत्र संदर्भ शामिल होते हैं, उन्हें तब तक पुनः दावा नहीं किया जाएगा जब तक उन्हें थ्रेड नहीं बनाया जाता है। इसे एक स्वीकार्य ट्रेडऑफ माना जाता है जिसमें यह रनटाइम कचरा संग्रह की आवश्यकता से बचाता है जो निष्पादन को धीमा कर देगा।
यदि आपका कोड परिपत्र संदर्भों के साथ डेटा संरचनाएं बनाता है (यानी एक पेड़ जिसका नोड्स रूट पर संदर्भ संदर्भित करता है), तो आप रूटर की तरफ इशारा करते हुए संदर्भों को "कमजोर" करने के लिए स्केलर :: उपयोग मॉड्यूल का उपयोग करना चाहेंगे नोड। ये कमजोर संदर्भ जो कुछ भी इंगित करते हैं, उनकी संदर्भ संख्या में शामिल नहीं होंगे, इसलिए अंतिम बाहरी संदर्भ गायब हो जाने पर संपूर्ण डेटा संरचना स्वचालित रूप से समाप्त हो जाएगी।
उदाहरण:
use Scalar::Util qw(weaken);
...
my $new_node = { content => $content, root => $root_node };
weaken $new_node->{root};
push @{$root_node->{children}}, $new_node;
आप इस जब भी आप अपने डेटा संरचना के लिए नए नोड्स जोड़ने की तरह कोड का उपयोग करते हैं, तो जड़ है कि वास्तव में गिने जाते हैं करने के लिए केवल संदर्भ संरचना के बाहर से होते हैं। यह वही है जो आप चाहते हैं। फिर जड़, और इसके सभी बच्चों को बार-बार, जैसे ही अंतिम बाहरी संदर्भ गायब हो जाता है, पुनः प्राप्त किया जाएगा।
स्रोत
2015-11-19 22:42:08
नाइट: पर्ल 5 संदर्भ गिनती का उपयोग करता है। यह एक कचरा संग्रह योजना है। – tsee
ठीक है, मैंने पर्ल 6 कचरा संग्रह के संदर्भ में संशोधन किया है। –
उत्तर अपडेट करने के लिए धन्यवाद। एनबी: प्लग करने योग्य कचरा कलेक्टर एक भयानक विचार की तरह लग रहा है। चीजों को धीमा करने और/या कचरा कलेक्टरों को प्लग करने के दौरान दूरी पर संदिग्ध कार्रवाई का एक शानदार तरीका है जो जीसी समय के बारे में अलग-अलग वादे करता है। – tsee