क्या जेनरल कचरा उठाने वाले स्वाभाविक रूप से कैश-फ्रेंडली हैं?


38

एक विशिष्ट जेनरेशनल कचरा कलेक्टर एक अलग मेमोरी क्षेत्र में हाल ही में आवंटित डेटा रखता है। विशिष्ट कार्यक्रमों में, बहुत सारा डेटा अल्पकालिक होता है, इसलिए युवा कचरा (एक मामूली जीसी चक्र) को बार-बार इकट्ठा करना और पुराने कचरा को इकट्ठा करना स्मृति ओवरहेड और जीसी करने में बिताए समय के बीच एक अच्छा समझौता है।

सहज रूप से, एकल-क्षेत्र कलेक्टर की तुलना में एक जेनरल कचरा कलेक्टर का लाभ बढ़ जाना चाहिए क्योंकि कैश के सापेक्ष मुख्य मेमोरी का विलंबता अनुपात बढ़ जाता है, क्योंकि युवा क्षेत्र में डेटा अक्सर एक्सेस होता है और सभी को एक ही स्थान पर रखा जाता है। क्या प्रायोगिक परिणाम इस अंतर्ज्ञान को पुष्ट करते हैं?


प्रश्न के लिए उपयुक्त टैग के बारे में संबंधित मेटा चर्चा
केव

जवाबों:


19

यहां कुछ कागजात दिए गए हैं, जो जेनरल कचरा उठाने वालों के कैश निहितार्थ के बारे में बात करते हैं:

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


10

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

जनरेशनल कलेक्टर उस पर ध्यान केंद्रित करेगा जिसे कभी-कभी "नर्सरी" स्थान कहा जाता है, लेकिन इसे अंततः / अनिवार्य रूप से "पुरानी" पीढ़ी की जगह पर इकट्ठा करना होगा, जिससे मेमोरी का पूर्ण स्कैन हो जाएगा।

यह पूर्ण स्कैन लगभग सभी मेमोरी कैशिंग और (विशेष रूप से!) वर्चुअलाइजेशन योजनाओं के साथ असंगत है कि इस मामले में किसी भी प्रदर्शन सुधार में लगभग सभी मेमोरी कैशिंग / वर्चुअलाइजेशन योजनाएं बुरी तरह से विफल होंगी।

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

कलेक्टर के संचालन के "सबसे" के लिए दूसरे शब्दों में, एक कैश संभवतः इसकी मदद करेगा (कैश और "युवा" नर्सरी स्पेस आमतौर पर ओवरलैप होगा!), लेकिन एक आवधिक, आंतरायिक, अंतिम, अपरिहार्य, भारी है। हो सकता है कि "बड़े पैमाने पर" [अपमानजनक] प्रदर्शन में स्पाइक हो जब "पुरानी पीढ़ी" की जगह पूरी तरह से एकत्र की जाती है और कैश "हिट रेट" बहुत खराब हो जाएगी, क्योंकि इसके बाहर कई ऑब्जेक्ट पूरी तरह से एक तंग लूप में आते हैं। स्कैन / चक्र इकट्ठा। दूसरे शब्दों में, एक अपरिवर्तनीय आवधिक विच्छेदन (जहां सांख्यिकीय अनुमान / औसत / प्रदर्शन के रुझान आदि भ्रामक और अनुपयुक्त हैं)।

अब जो उभर रहा है वह कुछ नए संग्रह सिस्टम हैं जिन्हें अंतर्निहित मेमोरी मैनेजमेंट सिस्टम (कैशिंग / वर्चुअलाइजेशन) के साथ मेष करने के लिए डिज़ाइन किया गया है। ऐसा प्रतीत होता है कि ऐतिहासिक दृष्टिकोण जो मेमोरी संग्रह, कैशिंग और वर्चुअलाइजेशन की अलग-अलग प्रणालियों को पूरी तरह से अलग कर देते हैं, वे सभी तीन पहलुओं को एक साथ जोड़ / एकीकृत / संबोधित करने वाले दृष्टिकोण के साथ-साथ प्रदर्शन नहीं करेंगे।

देखें झोउ और डेमस्की द्वारा कैश अवगत कचरा संग्रह।


तो आप तर्क दे सकते हैं कि गैर-पीढ़ीगत (शास्त्रीय) लोगों की तुलना में जनरेशनल जीसी कैश-फ्रेंडली हैं?
राफेल

मैं तर्क दूंगा कि जीसी को अपने डिजाइन के हिस्से के रूप में कैश और वर्चुअल मेमोरी के साथ एक एकीकृत तरीके से डिजाइन किया जाना चाहिए, जो मौजूदा आर्किटेक्चर में मुश्किल है। हालाँकि उत्तर पर विस्तार करने के लिए-- हाँ जेनरेशनल कलेक्टर / समुच्चय / समूह को अक्सर उपयोग की जाने वाली वस्तुओं को सन्निहित स्मृति में समूहित किया जाता है, जो अन्य डिजाइनों की तुलना में स्वाभाविक रूप से अधिक कैश-संगत होगा, जिसमें अक्सर और बार-बार उपयोग की जाने वाली वस्तुएं बिखरी हुई होती हैं (हालांकि बाद में) अभी भी कुछ कैश लाभ होगा)।
vzn

1
जीसी और कैशिंग / वर्चुअलाइजेशन आर्किटेक्चर को विलय करने का कुछ हद तक मुश्किल पहलू यह है कि ऐसे आर्किटेक्चर आमतौर पर मेमोरी पेज की सामग्री की परवाह नहीं करते हैं, लेकिन जीसी सिस्टम में इनकी आवश्यकता होती है। विभिन्न भाषाएं कभी-कभी प्रोग्रामर के लिए अलग जीसी-संबंधित सुविधाओं का वादा करती हैं, और यह पता लगाना कि ओएस स्तर पर समर्थन करने के लिए कौन सी सुविधाएँ मुश्किल हो सकती हैं। सबसे अच्छा तरीका शायद यह कहना होगा कि प्रत्येक वस्तु को एक संरचना के लिए एक सूचक को शामिल करने की आवश्यकता होती है, जिसका प्रारंभिक क्षेत्र ओएस द्वारा परिभाषित किया जाता है, लेकिन जिसे भाषा-विशिष्ट डेटा द्वारा पालन किया जा सकता है जिसे ओएस को पता नहीं होगा या परवाह नहीं होगी।
सुपरकैट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.