मैं ढेर, युवा, कार्यकाल और पर्म पीढ़ी के साथ उलझन में हूं।यंग, टेनेर और पर्म पीढ़ी
क्या कोई भी समझा सकता है?
मैं ढेर, युवा, कार्यकाल और पर्म पीढ़ी के साथ उलझन में हूं।यंग, टेनेर और पर्म पीढ़ी
क्या कोई भी समझा सकता है?
जावा कचरा कलेक्टर को जनरेटिव कचरा कलेक्टर के रूप में जाना जाता है। किसी एप्लिकेशन में ऑब्जेक्ट्स अलग-अलग समय के लिए रहते हैं, जहां वे बनाए जाते हैं और उनका उपयोग कैसे किया जाता है। यहां महत्वपूर्ण अंतर्दृष्टि यह है कि अल्पकालिक और दीर्घकालिक वस्तुओं के लिए विभिन्न कचरा संग्रहण रणनीतियों का उपयोग करके जीसी को विशेष रूप से प्रत्येक मामले के लिए अनुकूलित किया जा सकता है।
शिथिल शब्दों में, वस्तुओं के रूप में युवा पीढ़ी में दोहराया कचरा संग्रह वे पर्याप्त पीढ़ी के लिए चले जाते हैं "जीवित रहने के"। स्थायी पीढ़ी एक विशेष मामला है, इसमें ऑब्जेक्ट्स हैं, जिन्हें JVM द्वारा आवश्यक है, जो आपके प्रोग्राम में जरूरी नहीं हैं, उदाहरण के लिए वे वर्ग जो कक्षाओं और विधियों का प्रतिनिधित्व करते हैं।
चूंकि यंग जनरेशन में आमतौर पर बहुत सारे कचरे होंगे, इसे कई बार अप्रयुक्त वस्तुओं से छुटकारा पाने के लिए अनुकूलित किया जाता है। कार्यरत जनरेशन क्योंकि इसमें लंबे समय तक रहने वाली वस्तुओं को बहुत मेमोरी बर्बाद किए बिना त्वरित कचरा संग्रह के लिए अनुकूलित किया गया है।
कचरा संग्रहण प्रौद्योगिकी में सुधार के साथ विवरण बहुत जटिल हो गए हैं और आपके जेवीएम और यह कैसे कॉन्फ़िगर किया गया है के आधार पर भिन्न हो गए हैं। यदि आप यह जानना चाहते हैं कि वास्तव में क्या हो रहा है, तो आपको उस विशिष्ट JVM के लिए documentation पढ़ना चाहिए।
उस ने कहा, एक साधारण ऐतिहासिक व्यवस्था है जो अभी भी एक वैचारिक स्तर पर उपयोगी है। ऐतिहासिक रूप से यंग जनरेशनcopy collector होगा और कार्यरत जनरेशनmark and sweep collector हो।कॉपी कलेक्टर कचरे से छुटकारा पाने के लिए अनिवार्य रूप से कोई सीपीयू लागत नहीं देता है, अधिकांश लागत लाइव ऑब्जेक्ट्स को बनाए रखने में होती है, इस दक्षता की कीमत भारी मेमोरी उपयोग होती है। मार्क और स्वीप कलेक्टर लाइव और अप्रयुक्त ऑब्जेक्ट्स दोनों के लिए कुछ CPU लागत का भुगतान करता है लेकिन स्मृति को अधिक कुशलता से उपयोग करता है।
ढेर में सभी वस्तुएं जीवित रहेंगी, उनका संदर्भ दिया जाएगा। जब वे अधिक नहीं होते हैं, तो कचरा कलेक्टर (जीसी) उनकी याददाश्त को पुनः प्राप्त कर लेगा।
परमजेन, यंग और टेनेर ऑब्जेक्ट्स के अलग-अलग वर्गीकरण (या ढेर में रिक्त स्थान हैं जहां वे हो सकते हैं)।
परमजेन: ये वस्तुएं हमेशा वहां रहेंगी, वे कचरा नहीं एकत्रित हैं। कक्षा वस्तुओं, प्रशिक्षु तार, देखते हैं आदि अगर वहाँ एक जीसी है मैं नहीं जानता कि (जब सिस्टम कक्षाएं अनलोड ... लेकिन यह एक सामान्य बात नहीं है)
युवा: एक वस्तु यह है बन जाता है यहाँ।
कार्यरत: एन जीसी पास (जीवित = जीसी पास) से बचने पर यह ऑब्जेक्ट इस वर्गीकरण/श्रेणी में जाता है लेकिन इस ऑब्जेक्ट को संदर्भित किया जाता है ताकि इसे पुनः दावा नहीं किया जा सके)।
जीसी का उपयोग और कुछ पैरामीट्रिजेशन के आधार पर, जीसी अक्सर कम या ज्यादा गुजरता है।
फिर कचरे के संग्रह में ढेर में मंगे वस्तुओं के विभिन्न दृष्टिकोण हो सकते हैं। वस्तुओं का यह वर्गीकरण इसे करने में मदद करता है।
यदि आपको वास्तव में इस प्रकार की मेमोरी प्रबंधन चीज पसंद है तो फोर्टेगा की सिफारिश की जाती है। – helios
यहाँ पर एक और उत्कृष्ट (हालांकि लंबे) लेख है कि कैसे धुन/आकार अपने जीसी मानकों, जो मदद कर सकते हैं करने के लिए आप और भी अधिक समझ में:
https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/
एक बहुत ही उपयोगी पढ़ा करता है, तो आपको हो रही जीसी मुद्दों और जीसी लॉग पढ़ने के बारे में जानने की जरूरत है, या यह समझने की आवश्यकता है कि आपका वर्तमान जीसी कलेक्टर कैसे काम करता है।
आप चल रहे एक प्रणाली के दूरदराज के निगरानी ऊपर हुक करने वास्तविक स्मृति उपयोग देखना चाहते हैं और जीसी चलाता है इस उपकरण की जाँच हैं:
आपके उत्तर में उपरोक्त दो लिंक का सारांश जोड़ना उपयोगी होगा क्योंकि ये लिंक भविष्य में टूटा जा सकता है। –
जावा ढेर मेमोरी JVM के लिए आवंटित स्मृति का हिस्सा है ऑपरेटिंग सिस्टम द्वारा। जब भी हम वस्तुओं को बनाते हैं तो वे heap in java के अंदर बनाए जाते हैं।
जावा ढेर अंतरिक्षयुवा पीढ़ी, पुराने या पर्याप्त पीढ़ी और स्थायी पीढ़ी बुलाया कचरा संग्रहण के लिए तीन क्षेत्रों या पीढ़ी में विभाजित है। स्थायी पीढ़ी कचरा हॉटस्पॉट JVM में पूर्ण जीसी दौरान एकत्र किया जाता है
युवा पीढ़ी जहां सभी नई वस्तुओं आवंटित और वृद्ध हो रहा है। जब युवा पीढ़ी भर जाती है, तो यह मामूली कचरा संग्रह का कारण बनती है। मृत वस्तुओं से भरा एक युवा पीढ़ी बहुत जल्दी एकत्र की जाती है। कुछ जीवित वस्तुएं वृद्ध होती हैं और अंततः पुरानी पीढ़ी में जाती हैं।
पुरानी पीढ़ी लंबी जीवित वस्तुओं को स्टोर करने के लिए उपयोग किया जाता है। आम तौर पर, युवा पीढ़ी के ऑब्जेक्ट के लिए एक सीमा तय की जाती है और जब उस उम्र को पूरा किया जाता है, तो वस्तु पुरानी पीढ़ी में ले जाया जाता है। आखिरकार पुरानी पीढ़ी को इकट्ठा करने की जरूरत है। इस घटना को एक प्रमुख कचरा संग्रह कहा जाता है।
स्थायी पीढ़ी JVM द्वारा अपेक्षित वर्गों और तरीकों आवेदन में इस्तेमाल किया वर्णन करने के लिए मेटाडाटा शामिल हैं। आवेदन द्वारा उपयोग की जाने वाली कक्षाओं के आधार पर स्थायी पीढ़ी को रनटाइम पर जेवीएम द्वारा पॉप्युलेट किया जाता है।
PermGen के बाद से जावा 8 रिहाई Metaspaceसाथ प्रतिस्थापित किया गया। PermSize & MaxPermSize पैरामीटर अब अनदेखा कर दिए जाएंगे। मेट्रैस के बारे में समझने के लिए पियरे - ह्यूग्स चारबोनोऊ को देखें।
छवि स्रोत: http://www.oracle.com/webfolder/technetwork/tutorials/obe/java/gc01/index.html
अधिक जानकारी के लिए एक ही लेख का संदर्भ लें।
उत्कृष्ट..मैं जानता हूं कि विधि क्षेत्र, नेटिवस्टैक और रनटाइम निरंतर पूल इस तस्वीर में रहता है? और वे तदनुसार क्या पकड़ते हैं? अधिक जानकारी के लिए –
https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-2.html देखें। विधि क्षेत्र वर्चुअल मशीन स्टार्ट-अप पर बनाया गया है। यद्यपि विधि क्षेत्र ढेर का तार्किक रूप से हिस्सा है, लेकिन सरल कार्यान्वयन या तो कचरा इकट्ठा या कॉम्पैक्ट नहीं करना चुन सकता है। जावा रन वर्चुअल मशीन के विधि क्षेत्र से प्रत्येक रन-टाइम निरंतर पूल आवंटित किया जाता है –
परम पीढ़ी पर किस प्रकार की वस्तुएं रहती हैं? – Tony
मैंने स्थायी पीढ़ी के संबंध में उत्तर स्पष्ट किया है। मूल रूप से JVM को आपके एप्लिकेशन को प्रबंधित करने के लिए स्वयं की कुछ वस्तुओं की आवश्यकता होती है ये ऑब्जेक्ट आमतौर पर सीधे आपके एप्लिकेशन कोड में उपयोग नहीं किए जाते हैं। स्थायी पीढ़ी में वस्तुओं को कचरा इकट्ठा नहीं किया जाता है इसलिए नाम। –
@TendayiMawushe ["वर्तमान पीढ़ी JVMs में, वास्तव में ढेर के अन्य हिस्सों की तरह परमजन को एकत्रित किया जाता है"] (http://stackoverflow.com/questions/3796427/in-java-is- स्थायी- जनरेशन- स्पेस-garbage-collected) –