2017-03-05 10 views
6

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

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

उत्तर

4

पुरानी पीढ़ी की वस्तु स्वयं कचरा नहीं है तो यह कैसे पता चलेगा?

ऐसा नहीं है कि यह एक प्रमुख/पूर्ण संग्रह है। धारणा यह है कि पुरानी जीन वस्तु अक्सर मरती नहीं है।

जब एक पूर्ण संग्रह यह सभी वस्तुओं की जांच करता है किया जाता है, लेकिन जब एक छोटी सी/युवा संग्रह जवान संग्रह में केवल वस्तुओं किया जाता है साफ कर रहे हैं।

+0

आपके उत्तर के लिए धन्यवाद - मैं पुराने पीढ़ी वस्तु का संग्रह लेकिन अस्तित्व/एक युवा जीसी दौरान युवा पीढ़ी वस्तु का संग्रह के बारे में कम चिंतित था। इसलिए यदि मैंने जो कहा है उससे मैं सही ढंग से समझता हूं, अगर हमारे पास एक युवा पीढ़ी का ऑब्जेक्ट है जो केवल पुरानी पीढ़ी के ऑब्जेक्ट से आने वाला संदर्भ है जो स्वयं कचरा है, तो यह युवा पीढ़ी वस्तु (जो कचरा है) युवा जीसी से बचती है और केवल इसमें एकत्र की जाती है पहली युवा जीसी जो एक प्रमुख जीसी के बाद होती है जो पुरानी पीढ़ी के वस्तु को एकत्र करती है। – Stormshadow

+0

क्या मेरी समझ सही है? – Stormshadow

+1

असल में हाँ। मुझे लगता है कि वास्तव में "पूर्ण" पीढ़ी में एक ही समय में युवा और पुरानी जगहों का संग्रह शामिल है, क्योंकि "क्यों नहीं" और क्योंकि आपको युवा पीढ़ी में जड़ों और वस्तुओं के माध्यम से सभी पहुंचने योग्य खोजने के लिए भी जरूरी है पुरानी पीढ़ी की वस्तुओं। तो आप बस इसे "उन वस्तुओं को अगले पूर्ण जीसी तक एकत्र नहीं किया जाएगा"। @Stormshadow – BeeOnRope

1

सवाल

एक युवा वस्तु के लिए एक पुरानी वस्तु से एक संदर्भ बनाने के लिए, वर्ष वस्तु पहुंच योग्य होना चाहिए, के रूप में अन्यथा हम एक दुकान नहीं कर सकते हैं "आप कैसे ऐसे परिदृश्य के लिए मिलता है?" है इसमें युवा वस्तु का संदर्भ। बाद में पहुंचने योग्य बनने के लिए, हमें कम से कम या तो रूट संदर्भ या किसी अन्य पुरानी वस्तु को संशोधित करना होगा जो पहले पुराने ऑब्जेक्ट को संदर्भ में संदर्भित करता था।

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

बेशक

, यदि आप एक समवर्ती कलेक्टर का उपयोग करें, वहाँ संभावना है कि संशोधन है कि पुराने वस्तु नहीं पहुंचा जा सकता कर देगा होता है, जबकि एक संग्रह चक्र पहले से ही चल रही है। इस स्थिति में, यह संभव है कि इस जीसी चक्र के दौरान युवा वस्तु को पहुंचने योग्य माना जा सके, भले ही यह संशोधन न हो तो पहले नैनोसेकंड हुआ।

+0

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

+0

रूढ़िवादी ह्युरिस्टिक के रूप में कार्ड-मार्किंग के बारे में सोचें: यह _conservatively_ को पहुंचने योग्य सेट को बढ़ाने में सक्षम है जब यह किसी युवा वस्तु के संदर्भ को पुरानी जीन में लिखा गया है। यह हमेशा सही नहीं होता है - क्योंकि यह सुनिश्चित नहीं हो सकता कि पुरानी जेन ऑब्जेक्ट अभी भी पहुंच योग्य है, लेकिन कम से कम यह सही है क्योंकि एक बहुत बड़ा पहुंच योग्य सेट ठीक है। दूसरी तरफ, यह पहुंचने योग्य सेट को सुरक्षित रूप से कम नहीं कर सकता है, क्योंकि उस बदलाव को सटीक होना चाहिए और केवल संदर्भ को जानना ही आपकी मदद नहीं करता है। – BeeOnRope

+0

@BeeOnRope: बेशक, इसके लिए एक * मिश्रित संग्रह * की आवश्यकता होती है, जिसमें बदले गए कार्ड शामिल होते हैं। चूंकि ओपी के काल्पनिक परिदृश्य में पुरानी वस्तु का केवल एकमात्र मूल संदर्भ है और आने वाले संदर्भ * किसी क्षेत्र के लिए याद किए जाते हैं, यह पता लगाना संभव है कि यह एकल क्षेत्र-स्पैनिंग संदर्भ समाप्त हो गया है। इसलिए, केवल यह क्षेत्र यह पता लगाने के लिए किया जाना चाहिए कि कोई अंतर-क्षेत्र संदर्भ शेष नहीं है। मैं यह नहीं कह रहा हूं कि एक युवा संग्रह पर्याप्त था, मैं केवल इतना कह रहा हूं कि आपको पूर्ण जीसी की आवश्यकता नहीं है। – Holger

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