2013-01-14 11 views
12

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

मैं सोच रहा था, गो और कचरा संग्रह दृष्टिकोण के बीच क्या अंतर है जो इसे विलंबता मुक्त बनाता है?

अग्रिम धन्यवाद।


संपादित करें: @All मैं संपादित यदि आप इसे रचनात्मक लगता है इस सवाल का पूरी तरह से, इस सवाल को फिर से खोलने के लिए वोट करें।

+6

जावा गेम में मैं कभी भी कचरा कलेक्टर को तब तक नहीं चला सकता जब तक कि खेल में उपयुक्त बिंदु तक नहीं पहुंच जाता (उदाहरण के लिए रोकें मेनू)। इसे प्राप्त करने के लिए मेरे पास हमेशा कुछ प्रकार की मैनेजर क्लास होती है जो सभी बनाई गई ऑब्जेक्ट्स का संदर्भ रखती है और पॉज़ मेनू या स्तर के अंत तक पहुंचने पर उन्हें सभी रिलीज़ करती है। –

+0

आप इसे तुलना के लिए पसंद कर सकते हैं। http://code.google.com/p/jgo/ यदि गो 'स्ट्रक्चर' का समर्थन करता है तो इसमें जीआईटी स्पष्ट रूप से आपके लिए यह करने की अपेक्षा करने के बजाय स्पष्ट रूप से जीसी से बचने की क्षमता है। –

+0

@ जोनटाइलर आपने ऐसा क्यों किया? जेवीएम कचरा कलेक्टर प्रदर्शन या कुछ और के कारण? –

उत्तर

14

गो में विलंबता मुक्त कचरा संग्रह नहीं है। यदि आप बता सकते हैं कि वे दावे कहां हैं, तो मैं उन्हें सही करने की कोशिश करना चाहता हूं।

एक लाभ जो हम मानते हैं कि गो जावा पर है, यह है कि यह आपको स्मृति लेआउट पर अधिक नियंत्रण देता है। उदाहरण के लिए, एक साधारण 2 डी ग्राफिक्स पैकेज परिभाषित कर सकता है:

type Rect struct { 
    Min Point 
    Max Point 
} 

type Point struct { 
    X int 
    Y int 
} 

गो में, एक रेक्ट स्मृति में केवल चार पूर्णांक संगत है। आप अभी भी & r.Max को * प्वाइंट की अपेक्षा करने के लिए पास कर सकते हैं, यह केवल रेक्ट वेरिएबल आर के बीच में एक सूचक है।

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

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

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

+0

मैंने इसे देखने में देखा: http://golang.org/doc/faq#garbage_collection –

+1

मुझे लगता है कि यह जावा भाषा से ज्यादा जावा भाषा से संबंधित है ... स्कैला, एक जेवीएम भाषा में मूल्य वर्ग है एक समान नौकरी http://docs.scala-lang.org/overviews/core/value-classes.html मैं जेवीएम की तुलना में जीसीएम की तुलना में अधिक संसाधनों की कामना करता हूं, दोनों बहुत ही रोचक हैं और मुझे लगता है कि दोनों घिरे हुए हैं बहुत सारी मिथक और गलतफहमी ..... – CocoOS

+0

@ सईडज़ारिनफैम, आपने इसे गलत तरीके से पढ़ा होगा। मुझे वहां "विलंबता मुक्त कचरा संग्रह" का दावा नहीं दिख रहा है (न ही [इतिहास के त्वरित खोज] में [https://github.com/golang/go/blame/master/doc/go_faq.html# L1867))। यह केवल "[...] विश्वास है कि हम ** इसे लागू कर सकते हैं ** [...] कोई ** महत्वपूर्ण ** विलंबता" (जोर जोड़ा गया)। यह * वर्तमान * कार्यान्वयन के बारे में एक मूलभूत नोट के तुरंत बाद किया जाता था (नोट को तब से अपने स्वयं के अनुच्छेद में ले जाया गया है)। मेरे लिए "कोई महत्वपूर्ण विलंबता"! = "विलंबता मुक्त" और यह * भविष्य * सुधारों को भी संदर्भित करता है। –

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