मोबाइल प्लेटफ़ॉर्म जेनरेशन कचरा संग्रहण का समर्थन क्यों नहीं करते?


11

विंडोज फोन / एक्सबॉक्स और एंड्रॉइड दोनों में जेनरल कचरा संग्रहण के लिए समर्थन की कमी है। यह बहुत सारे प्रोग्रामर के लिए निराशाजनक है। लगता है कि यह एक वैध इंजीनियरिंग कारण है, लेकिन मैं इसका पता नहीं लगा सकता।

वर्तमान फोनों में अधिक मेमोरी होती है और संभवतः डेस्कटॉप / लैपटॉप की तुलना में बेहतर CPU हैं। 2001 में जेनिटल GC के साथ .NET 1.1 चल रहा है, और मैं किसी भी कारण से नहीं सोच सकता कि ARM प्रोसेसर x86 की तुलना में जेनेरिक GC में अधिक खराब होगा। फोन और कंसोल पर मल्टीटास्किंग की भी कम आवश्यकता है, इसलिए अपेक्षाकृत अधिक मुक्त स्थान है।

तो क्या देता है?

संपादित करें: स्पष्ट करने के लिए कुछ बिंदु:

  • ये प्लेटफ़ॉर्म विशेष रूप से ऐप्स के लिए कचरा संग्रह का उपयोग करते हैं, इसलिए मेरा सवाल यह नहीं है कि जीसी समर्थित क्यों नहीं है; मेरा सवाल यह है कि जेनरल कचरा संग्रहण क्यों नहीं है।
  • जेनेशनल जीसी की कमी के बारे में लोगों को निराश होने का कारण यह है कि गैर-जीनेशनल जीसी बेहद अक्षम है। (इसका मतलब है कि बैटरी लाइफ इसका कारण नहीं है।)
  • मुझे विश्वास है कि जेनरल जीसी समर्थन की कमी के लिए एक ईमानदार तकनीकी कारण है। यह एक अलंकारिक प्रश्न नहीं है।

विंडोज फोन (वर्तमान पीढ़ी) में कचरा संग्रह होता है। यह केवल तब चलता है जब डिवाइस मेमोरी पर कम होता है msdn.microsoft.com/en-us/library/gg490770.aspx
टॉम स्क्वायर्स

@TomSquires WP7 पर GC हर 1MB आवंटन पर एक बार चलता है, वास्तव में। मुझे लगता है कि आप कार्य प्रबंधक को पुरानी प्रक्रियाओं के बारे में सोच रहे होंगे।
री मियासाका

जवाबों:


5

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

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


3
पीढ़ी जीसी ज्यादातर मामलों में बहुत अधिक कुशल है, वास्तव में, इसलिए आपको लगता है कि यह घड़ी चक्र की संख्या को कम करेगा। यह भी स्पष्ट नहीं करता है कि Xbox की तरह कुछ के पास जेसीली जीसी क्यों नहीं है, क्योंकि Xbox प्लग इन हैं।
री मियासाका

ठीक है, यह वही है जो मैंने स्टैक ओवरफ्लो पर सुना था। मैं XBox-es के बारे में बहुत कुछ नहीं जानता, हालांकि।
dasblinkenlight

3
यह अभी भी सवाल का जवाब नहीं है। भले ही कचरा संग्रहण में स्पष्ट आवंटन की तुलना में अधिक शक्ति का उपयोग किया जाता है (जो अत्यधिक बहस योग्य है - और मैं इसमें नहीं मिलूंगा), सवाल यह नहीं है कि क्या / क्यों स्पष्ट आवंटन मोबाइल पर जीसी से बेहतर है, अगर यह / क्यों गैर है? जेनेरिक जीसी मोबाइल पर जेनेशनल जीसी से बेहतर है।
री मिया मियाका

1
@ री: खेलों में आमतौर पर सब कुछ नियतात्मक होने की आवश्यकता होती है; कम से कम, उन्हें पूर्वानुमानित प्रदर्शन की आवश्यकता है। कुछ नैनोसेकंड यहाँ बर्बाद हो गए और कुछ नैनोसेकंड बर्बाद हो गए - अप्रत्याशित समय पर - एक खेल के अनुभव को बढ़ा सकते हैं। पीढ़ीगत कचरा संग्रहकर्ता अप्रत्याशित हैं।
चींटी

2
@djacobson मुझे नहीं लगता कि यह सच है। जैसा कि मैंने सवाल में कहा था, अगर यह सिर्फ Microsoft के प्लेटफॉर्म जेनेरिक GC की उपेक्षा कर रहे थे, तो यह शायद केवल एक तार्किक / नौकरशाही कारण होगा, और मैं पूछने से परेशान नहीं होगा। लेकिन एंड्रॉइड भी इसी समस्या से ग्रस्त है, इसलिए यह तकनीकी कारण है, जिसका अर्थ है कि P.SE पर किसी का निश्चित उत्तर हो सकता है।
री मियासाका

3

मेरा सबसे अच्छा अनुमान यह होगा कि यह कोई तकनीकी कारण नहीं है, लेकिन यह है कि उन फोन प्लेटफार्मों के लिए डेवलपर्स अभी तक प्रयास में नहीं लगाए हैं। मुझे पता है कि यह वह उत्तर नहीं है जिसकी आप उम्मीद कर रहे हैं, लेकिन यदि आपने कोई ऐसा मोबाइल विकास किया है जिस पर आपने ध्यान दिया हो तो बहुत कम लटका हुआ फल है। उनके पास संभवतः कई GC कार्यान्वयन लिखने का समय नहीं है, उन सभी को ठीक से ट्यून करें, और सबसे अच्छा करने वाले का चयन करें। जब वे नए, आकर्षक, खराब-विचार वाले एपीआई को जारी कर सकते हैं, तो कोई भी पहिया को फिर से स्थापित करने में समय क्यों बिताएगा? ;)

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


2

जेनरल कचरा संग्रहण के लिए कुछ अतिरिक्त लागत है।

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

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

मुझे संदेह है कि मोबाइल सिस्टम पर्दे के पीछे एक ही सामान नहीं कर रहे हैं। परिणामस्वरूप, उनके पास समान स्तर की जानकारी नहीं होती है जो एक डेस्कटॉप के पास होती है। परिणाम में, एक सामान्य संग्रह को लागू करने में शामिल ओवरहेड अधिक है और इसके लायक होने की संभावना कम है।


जीसी पीढ़ियों का अधिकतम लाभ उठाने के लिए पुरानी पीढ़ी की वस्तुओं को लिखे जाने का पता लगाने के लिए लेखन बाड़ का उपयोग करना पड़ता है। दूसरी ओर, भले ही जीसी का "निशान" हिस्सा पीढ़ियों से लाभ न उठा सके, मुझे लगता है कि कोई भी नई पीढ़ियों में केवल चलती चीजों द्वारा प्रदर्शन में सुधार कर सकता है (वास्तव में, पुरानी पीढ़ियों पर "टैग" चरण के रूप में) साथ ही नया उपयोगी हो सकता है अगर यह एक को यह जानने की अनुमति देता है कि प्रत्येक पीढ़ी में कितनी पुनः प्राप्त करने योग्य स्मृति मौजूद है)।
सुपरकैट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.