सूर्य/ओरेकल के जेवीएम के लिए, मैंने पढ़ा है कि जीसी अलगो नई पीढ़ी को एक ईडन क्षेत्र और दो जीवित क्षेत्रों में विभाजित करता है। मैं क्या सोच रहा हूं, क्यों दो जीवित क्षेत्र और सिर्फ एक ही नहीं? अहंकार ईडन और केवल एक जीवित क्षेत्र (जिस तरह से यह वर्तमान में दो जीवित क्षेत्रों के बीच करता है) के बीच पिंग-पोंगिंग रख सकता है; या इस दृष्टिकोण के लिए कोई कमी है?जावा जीसी: दो जीवित क्षेत्र क्यों?
उत्तर
मेरा मानना है कि जेआरॉकिट का जीसी कार्यान्वयन आपके जैसा सुझाव देता है, केवल एक ही ईडन और एकल जीवित स्थान के साथ, लेकिन मुझे उस पर उद्धरण न दें।
हॉटस्पॉट जेवीएम के दो जीवित रिक्त स्थान का कारण विखंडन से निपटने की आवश्यकता को कम करना है। ईडन स्पेस में नई ऑब्जेक्ट आवंटित की जाती हैं। सब ठीक है और अच्छा है। जब यह पूरा हो जाता है, तो आपको एक जीसी की आवश्यकता होती है, इसलिए पुरानी वस्तुओं को मार दें और जीवित लोगों को जीवित स्थान पर ले जाएं, जहां वे पुरानी पीढ़ी को बढ़ावा देने से पहले थोड़ी देर के लिए परिपक्व हो सकते हैं। अभी तक अभी भी अच्छा है। अगली बार जब हम ईडन स्पेस से बाहर निकलते हैं, तो हमारे पास एक कन्डर्रम है। अगला जीसी दोनों ईडन और हमारे उत्तरजीवी अंतरिक्ष में कुछ जगहों के साथ आता है और साफ़ करता है, लेकिन रिक्त स्थान संगत नहीं होते हैं। तो
- जीसी द्वारा छोड़े गए उत्तरजीवी अंतरिक्ष में छिद्रों में ईडन से बचे हुए लोगों को फिट करने का प्रयास करें?
- विखंडन को खत्म करने के लिए जीवित अंतरिक्ष में सभी वस्तुओं को शिफ्ट करें, और फिर बचे हुए लोगों को इसमें ले जाएं?
- बस कहें "इसे पेंच करें, हम सबकुछ चारों ओर घूम रहे हैं," और सभी जीवों से सभी बचे हुए लोगों को पूरी तरह से अलग जगह में कॉपी करें - दूसरी जीवित जगह - इस प्रकार आपको एक साफ ईडन और उत्तरजीवी स्थान जहां आप अगले जीसी पर अनुक्रम दोहरा सकते हैं?
प्रश्न का सूर्य का उत्तर स्पष्ट है।
यह मेरे लिए स्पष्ट नहीं है। हॉटस्पॉट जेवीएम का क्या विकल्प है? – vz0
एक बहुत स्पष्ट और सटीक उत्तर के लिए धन्यवाद। यदि संभव हो, तो आप भी पीएल कर सकते हैं। JRockit किस विकल्प का उपयोग करता है पर टिप्पणी? – shrini1000
@ vz0: यह तीसरा विकल्प है। – shrini1000
पीढ़ी के सभी उदाहरणों को एक स्थान से दूसरे स्थान पर प्रतिलिपि बनाने के फायदे और नुकसान क्या हैं, बनाम उन्हें पीढ़ी की जगह की शुरुआत में स्मृति-पता क्रम में कॉपी करना? क्रमशः प्रसंस्करण वस्तुओं को प्रति आइटम एक अतिरिक्त सूचक जोड़ने की आवश्यकता होगी, लेकिन 'जीवित' रिक्त स्थानों में से किसी एक की आवश्यकता को खत्म कर देगा।
दो उत्तरजीवी रिक्त स्थान की भूमिका एक छोटी सी कचरा संग्रहण
दो उत्तरजीवी रिक्त स्थान की ऑपरेशन के बाद उलट हो जाता है। ये ऐसी वस्तुएं हैं जो कम से कम एक मामूली कचरा संग्रह से बच गई हैं लेकिन पुरानी पीढ़ी को पदोन्नत होने से पहले पहुंचने योग्य नहीं होने का एक और मौका दिया गया है। उनमें से केवल एक वस्तुएं रखती है, जबकि दूसरी बार अप्रयुक्त है।
एक मामूली कचरा संग्रह के संचालन के दौरान, कचरा पाया गया वस्तुओं को चिह्नित किया जाएगा। संग्रह में जीवित ईडन में लाइव ऑब्जेक्ट्स अप्रयुक्त उत्तरजीवी अंतरिक्ष में प्रतिलिपि बनाई गई हैं। उपयोग में आने वाले उत्तरजीवी अंतरिक्ष में लाइव ऑब्जेक्ट्स, जिन्हें युवा पीढ़ी में पुनः दावा करने का एक और मौका दिया जाएगा, को अप्रयुक्त उत्तरजीवी अंतरिक्ष में भी कॉपी किया जाएगा। अंत में, उपयोग में आने वाले उत्तरजीवी अंतरिक्ष में लाइव ऑब्जेक्ट्स, जिन्हें समझा जाता है, पुरानी पीढ़ी को प्रोत्साहित किया जाता है।
नाबालिग कचरा संग्रह के अंत में, दो जीवित रिक्त स्थान भूमिकाएं स्वैप करते हैं। ईडन पूरी तरह से खाली है; केवल एक जीवित अंतरिक्ष उपयोग में है; और पुरानी पीढ़ी का अधिग्रहण थोड़ा बढ़ गया है। चूंकि लाइव ऑब्जेक्ट्स को इसके ऑपरेशन के दौरान कॉपी किया जाता है, इस प्रकार के कचरा कलेक्टर को प्रतिलिपि कचरा कलेक्टर कहा जाता है।
स्रोत: ऊपर चार्ली हंट और बिनू जॉन द्वारा Java Performance के पृष्ठ 83 के अंश हैं।
युवा पीढ़ी: यह जगह है जहाँ छोटी अवधि के लिए रहते थे और दो रिक्त स्थान में विभाजित है:
ईडन अंतरिक्ष: नई वस्तुओं स्मृति पूल में आवंटित किया जाएगा। धारणा यह है कि अधिकांश वस्तु को संदर्भित किया जाता है और उनकी रचना के तुरंत बाद पहुंच योग्य नहीं होता है। जिन वस्तुओं को संदर्भित नहीं किया जा रहा है, उन्हें जीवित रिक्त स्थान में नई पीढ़ी के कचरा कलेक्टर द्वारा प्रतिलिपि बनाई जाएगी। वे कुछ विशेष मामलों को सीधे पुराने पीढ़ी के पूल में कॉपी कर सकते हैं।
उत्तरजीवी रिक्त स्थान: ये दो छोटी जगहें युवा पीढ़ी के कचरे के संग्रह की जीवित वस्तुओं को बनाए रखती हैं। जीवित वस्तुओं को एक जीवित व्यक्ति से दूसरे में एक (छोटी) संख्या के लिए प्रतिलिपि बनाई जाएगी। यह हमारी अधिक अस्वीकृत वस्तुओं को फसल करने की अनुमति देता है।
पुरानी पीढ़ी: सबसे बड़ी मेमोरी पूल जो लंबी जीवित वस्तुओं को रखना चाहिए। एक बार जीवित रिक्त स्थान छोड़ने के बाद वस्तुओं को इस पूल में कॉपी किया जा रहा है।
पर्मामेंट पीढ़ी: यह काफी अज्ञात पूल सभी वर्गों की जानकारी रखता है। अधिकांश अनुप्रयोगों के लिए इसे किसी भी ध्यान देने की आवश्यकता नहीं है। इसे कई कक्षाओं के साथ कुछ अनुप्रयोगों के लिए अनुकूलित करने की आवश्यकता हो सकती है। इसे कुछ ध्यान देने की आवश्यकता हो सकती है यदि एप्लिकेशन स्थायी रूप से कक्षाओं को लोड और अनलोड करता है।
अन्य फायदे:
- मेमोरी विखंडन
- यह जीसी प्रदर्शन को बेहतर बनाता
कृपया अधिक जानकारी के लिए निम्न लिंक जो आप समझ सकते हैं खोजने के अधिक
स्मृति विखंडन के बारे में सभी वर्तमान उत्तर बात, यह भी जीसी में पीढ़ियों का एक और कारण है।
रनटाइम सभी "पुरानी वस्तुओं" को रिकॉर्ड करता है जो "नई वस्तुओं" को इंगित करता है, यह हर बार "पॉइंटर" फ़ील्ड अपडेट होने पर किया जाता है। फिर जब एक "खनिक" जीसी किया जाता है, तो केवल "नई" वस्तुओं को स्कैन करने की आवश्यकता होती है।
वर्षों से यह पाया गया है कि केवल "नया" और "पुराना" पर्याप्त नहीं है, और यह तीसरी पीढ़ी है जो "मध्यम आयु वर्ग" है।
दो बचे हुए चिह्न चिह्न और प्रतिलिपि एल्गोरिदम के कार्यान्वयन हैं। ये युवा पीढ़ी के लिए जीसी में उपयोग किया जाता है। विकल्प में रयान द्वारा उल्लेख किया है 3 here
- 1. विस्तृत जावा जीसी लॉग
- 2. जावा जीसी लॉग विश्लेषण
- 3. जीसी
- 4. जीसी में सफेद/ग्रे/काला क्यों?
- 5. क्यों POP3 प्रोटोकॉल जीवित रहता है?
- 6. दो दो रिकॉर्ड के क्षेत्र OCaml
- 7. जावा जीसी में पुराने क्षेत्र को अनुकूली रूप से आकार कैसे बदल सकता हूं?
- 8. एफ # कंपाइलर जीवित वस्तुओं को जीवित रखें
- 9. जीवित जनरेशन को समझना मीट्रिक
- 10. जावा समवर्ती मोड विफलता और अत्यधिक जीसी
- 11. जावा ऑडियो अनुप्रयोग के लिए ट्यूनिंग जीसी
- 12. मैं जीसी
- 13. जीवित कॉल
- 14. जावा ग्रेगोरी कैलेंडर समय-क्षेत्र
- 15. जावा - सरणी क्षेत्र
- 16. UIWebView और जीवित रहें?
- 17. एंड्रॉयड जीसी - LogCat हमेशा जीसी गतिविधि
- 18. Clojure बंद और जीसी
- 19. जीसी() कमांड
- 20. rbenv: gemsets बिना जीवित
- 21. चौराहे के क्षेत्र दो के बीच मंडलियां
- 22. HTTP रखें जीवित रखें और टीसीपी जीवित रखें
- 23. जीसी छेद क्या हैं?
- 24. क्या वाला जीवित रहेगा?
- 25. कनेक्शन रखने-जीवित समस्याएं
- 26. पिनाक्स जीवित है?
- 27. जावा प्रोग्रामर एनोटेशन से पहले कैसे जीवित रहे?
- 28. जावा प्रतिबिंब - पहुँच संरक्षित क्षेत्र
- 29. पूर्ण जीसी स्पोरैडिक
- 30. जीसी विनाश प्रयास
दिलचस्प - आप जहाँ आप इस के बारे में पढ़ने के लिए लिंक (रों) पोस्टिंग में बात करेंगे? मुझे लगता है कि सवाल में मदद मिलेगी। ** संपादित करें: ** [यह आलेख] (http://javarevisited.blogspot.com/2011/04/garbage-collection-in-java.html) इसका वर्णन करने लगता है, यह सुनिश्चित नहीं है कि यह वही है जिसे आप पढ़ते हैं। –
पॉल बेलोरा: प्रति लिंक यह लिंक नहीं है, लेकिन मैंने इसे कई पुस्तकों और लेखों में पढ़ा है। जल्द ही इन लिंक पोस्ट करेंगे। – shrini1000
@ पॉल बेलोरा यह जावा 5 के लिए है, लेकिन यह 'से' और 'से' जीवित रिक्त स्थान का उल्लेख करता है: http://www.oracle.com/technetwork/java/javase/memorymanagement-whitepaper-150215.pdf – shrini1000