मेरे पास कुछ कोड है जो मुझे संदेह है कि स्मृति लीक हो रही है। कोड ccall
का उपयोग करता है और पॉइंटर्स के अंदर आयोजित महत्वपूर्ण जानकारी को बनाए रखता है, जिसे ccall
एड finalizer
एस के दौरान कोड द्वारा मुक्त किया जाना चाहिए।'gc()' मैन्युअल रूप से कॉल कर रहा है, परिणामस्वरूप सभी 'अंतिमकर्ता' तुरंत निष्पादित किए जा रहे हैं?
मेरी डीबगिंग में मैं gc()
पर कॉल कर रहा हूं। और मैं जानना चाहता हूं कि यह तुरंत finalizer
एस को ट्रिगर करेगा जो
उत्तर से जुड़ी ऑब्जेक्ट्स से जुड़े हुए हैं, केवल जूली 0.5+ के साथ चिंतित होना चाहिए।
यह एक अच्छा जवाब स्टीफन है। क्या यह कहना उचित होगा कि यह केवल वर्तमान जीसी() कार्यान्वयन का सच है, और यह भाषा अनुबंध नहीं है? यानी, यह व्यवहार भविष्य में बदल सकता है। उदाहरण के लिए, अगर और जब हम बहु-थ्रेडेड जीसी प्राप्त करते हैं? – aviks
हां, अगर हमें एक समवर्ती जीसी मिलती है, तो सभी दांव बंद होते हैं - लेकिन हमें इसके प्रभाव पर विचार करना होगा। एक समवर्ती जीसी में, म्यूटेटर थ्रेड और कलेक्टर थ्रेड होते हैं जो एक ही समय में चलते हैं, इसलिए यह पूरी तरह स्पष्ट नहीं है कि यह एक म्यूटेटर थ्रेड में 'gc() 'को कॉल करने का भी अर्थ है। इसे संभावित रूप से म्यूटेटर थ्रेड को अवरुद्ध करने के लिए व्यवस्थित किया जा सकता है जिसमें इसे कलेक्टर थ्रेड में "पूर्ण संग्रह" होने तक बुलाया जाता है। या यह समवर्ती संग्राहक के स्थान पर एक स्टॉप-द-वर्ल्ड जीसी एल्गोरिदम का आह्वान कर सकता है, लेकिन फिर हमारे पास दो अलग-अलग जीसी कार्यान्वयन हैं, जो अजीब होंगे। – StefanKarpinski