कचरा संग्रह का लाभ यह है कि यह एक मशीन को अनंत मात्रा में मेमोरी के साथ अनुकरण करता है। उस अमूर्त के तंत्र या कार्यान्वयन का उद्देश्य प्रोग्रामर के रूप में आपके लिए पूरी तरह से पारदर्शी होना है। हम सभी जानते हैं कि तंत्र स्मृति को पुनः प्राप्त कर रहा है जो अब प्रोग्राम द्वारा उपयोग नहीं किया जाता है, लेकिन वास्तव में इसकी गारंटी नहीं है। यदि आप प्रोग्राम को वास्तव में उपयोग करने वाले प्रोग्राम की तुलना में अधिक रैम वाले मशीन पर चलाते हैं, तो कचरा संग्रह कभी भी नहीं हो सकता है। फिर, अप्रासंगिक, क्योंकि आप प्रोग्राम को बिना इस बात के लिख सकते हैं कि वह किस तरह से मेमोरी का उपयोग करता है। जब भी प्रोग्राम अनुरोध करेगा, मेमोरी मैनेजर अधिक रैम आवंटित करेगा, और आपको यह मानने की अनुमति होगी कि इस तरह के आवंटन हमेशा सफल होंगे। जावा एक कचरा एकत्र करने वाली भाषा है, और C ++ नहीं है। 1
कचरा संग्रहण का नुकसान यह है कि सभी सार की तरह , यह टपका हुआ है। यह हमेशा पूरी तरह से हर समय काम नहीं करता है, विशेष रूप से किनारे के मामलों में, और आपको कीड़े में चलने की संभावना है। जिन लोगों ने कचरा संग्रह एल्गोरिथ्म लिखा था (एक जिसे प्रोग्रामर के रूप में आपके लिए पारदर्शी माना जाता है) सबसे आम मामलों के लिए अनुकूलित है, और सामान्य मामलों के साथ परेशानी यह है कि वे कभी भी आम नहीं होते हैं। सामान्य तौर पर , आप मेमोरी के प्रबंधन में कचरा संग्रहकर्ता की तुलना में कोई बेहतर नहीं कर सकते। लेकिन विशिष्ट परिस्थितियों में (और पर्याप्त मात्रा में समय, ऊर्जा और समझ को देखते हुए) यह संभव हो सकता है। सी ++ आपको यह लचीलापन देता है; जावा नहीं करता है
उस सभी ने कहा, मुझे लगता है कि भाषा चुनने की मानक सलाह यहाँ लागू होती है, शायद इस मामले में और भी अधिक बाधाओं को देखते हुए। उस भाषा को चुनें जो परियोजना के लिए प्राथमिक डेवलपर्स के लिए सबसे अधिक परिचित है। स्पष्ट कारणों के अलावा (जैसे आप तेजी से और अधिक कुशलता से ऐप विकसित कर पाएंगे), यह विशेष रूप से हैइस मामले में महत्वपूर्ण है कि आप वर्णन करते हैं क्योंकि प्रोग्रामिंग सी ++ जैसे आप प्रोग्रामिंग कर रहे हैं जावा का परिणाम बहुत ही अप्रभावी स्मृति प्रबंधन प्रथाओं में होता है, और इसलिए लीक और क्रैश। एनालॉग रूप से, जावा में प्रोग्रामिंग जैसे कि आप C ++ में प्रोग्रामिंग कर रहे हैं, यह आपको बहुत अच्छा नहीं करने वाला है, और एक कम-से-अनुकूलित प्रोग्राम का उत्पादन कर सकता है, यह देखते हुए कि कचरा संग्रह एल्गोरिदम को सबसे आम मामलों के लिए ट्विक और ट्यून किया गया है। ।
प्रोग्रामर जिन्हें कचरा एकत्र करने वाली भाषाओं में काम करने के लिए उपयोग किया जाता है, वे कचरा कलेक्टर पर भरोसा करना सीखते हैं, बजाय इसके खिलाफ लड़ने के। यदि आप कचरा एकत्र करने वाली भाषा में काम कर रहे हैं, तो ये प्रोग्रामर हैं जिन्हें आप अपने प्रोजेक्ट पर चाहते हैं। प्रोग्रामर जो नहीं हैंकचरा एकत्र करने वाली भाषा में काम करने के लिए उपयोग किया जाता है स्वाभाविक रूप से इस तरह के "अनंत स्मृति" अमूर्तता पर संदेह होता है, और अक्सर कई अच्छे कारणों के साथ। इन प्रोग्रामर के रूप में अच्छा हो सकता है, ये वे नहीं हैं जिन्हें आप कचरा-एकत्र की गई भाषा में काम करना चाहते हैं क्योंकि वे जीसी के खिलाफ हर तरह से कदम रखेंगे, लगातार दूसरी-अनुमान लगाने और अक्सर धीमी, कम मेमोरी-कुशल बनाने के लिए। प्रोग्रामर के अन्य प्रकार की तुलना में कोड। सबसे अच्छा, वे पहिया को फिर से स्थापित करने में बहुत समय बिताएंगे, आपको बहुत सारे पैसे खर्च होंगे और लंबे समय तक रखरखाव की लागत भी।
और फिर आपको खुद से यह भी पूछना होगा कि क्या यह वास्तव में मायने रखता है। बो की स्नाइड टिप्पणी के लिए सच्चाई का एक संकेत से अधिक है: स्मृति अब बहुत सस्ती है, यह शायद ही बहुत अधिक हाथ से लिखे जाने लायक है। यहां तक कि अगर आपको बड़े पैमाने पर राशि की आवश्यकता है , तो वे राशि लगभग उतनी बड़े पैमाने पर नहीं हैं जितनी 10 साल पहले थीं। प्रोग्रामर और एप्लिकेशन डेवलपमेंट सिर्फ रैम और प्रोसेसिंग पॉवर के gobs खरीदने से कहीं अधिक महंगे हैं। इसका मतलब यह नहीं है कि आपको अर्थव्यवस्था को जहां संभव हो बचाना चाहिए, लेकिन इसका मतलब यह है कि आपको इसे करने में बहुत समय बर्बाद नहीं करना चाहिए।
1 बेशक, यह धारणा सवाल में एक गहरी खामी को उजागर करती है। जैसा कि यह पता चला है, "जावा या सी ++" थोड़ा लाल हेरिंग है। मानक जावा कार्यान्वयन कचरा संग्रहण प्रदान करता है और C ++ भाषा के मानक के अनुसार नहीं है, लेकिन इसका कोई कारण नहीं है कि आप C ++ के लिए किसी तृतीय-पक्ष कचरा कलेक्टर का उपयोग नहीं कर सकते। बहुत सी कंपनियों ने इन चीजों को बेचकर जीवनयापन किया है, और कुछ ने संभवत: मुफ्त में अपना जीवनयापन कर लिया है।