2013-05-14 8 views
19

मैं जावा में कचरा संग्रह और SO Q & ए पर पढ़ रहा हूं लेकिन मैं कचरा संग्रह के प्रकारों के बारे में उलझन में हूं।जावा मेजर और माइनर कचरा संग्रह

चलिए एक उदाहरण के रूप में थ्रूपूट कलेक्टर लेते हैं। (उर्फ समांतर कलेक्टर)। दस्तावेज़ों का कहना है कि यह माइनर संग्रह और मेजर संग्रह (सीरियल कलेक्टर के समान) के लिए एकल थ्रेड का उपयोग करता है।

अब मेरे सवालों का: एक पूर्ण जीसी द्वारा

  1. इसका क्या मतलब है: क) यह दोनों माइनर और मेजर संग्रह मतलब यह है की जाती हैं? या बी) पूर्ण जीसी == प्रमुख संग्रह? इनमें से कौनसा?
  2. यदि ए), तो क्या इसका मतलब यह है कि माइनर संग्रह अभी भी कई धागे का उपयोग करके किया जाता है जबकि मेजर एकल का उपयोग करके किया जाता था?
  3. यदि बी), तो क्या इसका मतलब है कि युवा & पुरानी पीढ़ी एकल थ्रेड का उपयोग करके साफ़ कर दी गई थी?

इसके अलावा, 4. क्या पूर्ण जीसी केवल ओल्डजनरेशन या यंग जनरेशन को भी प्रभावित करता है?

अग्रिम धन्यवाद।

+1

+1। मेरे प्रश्न पूछने के लिए धन्यवाद – Imposter

उत्तर

27

मुझे समझाएं।

चलिए एक उदाहरण के रूप में थ्रूपूट कलेक्टर लेते हैं। (उर्फ समांतर कलेक्टर)। दस्तावेज़ों का कहना है कि यह प्रमुख संग्रह (सीरियल कलेक्टर के समान) के लिए माइनर संग्रह और एकल धागा करने के लिए कई धागे का उपयोग करता है।

यहां कुछ समझने के लिए कुछ है। डिफ़ॉल्ट रूप से, अधिकांश नए सिस्टम पर, जेवीएम युवा और पुरानी पीढ़ियों के लिए दो अलग कचरा कलेक्टरों का उपयोग करता है। मेरी मशीन पर: मेरे पास पीढ़ी पीढ़ी के लिए समानांतर नए कलेक्टर और जनरेशन के लिए समवर्ती मार्क और स्वीप कलेक्टर है।

मामूली संग्रह तब ट्रिगर होता है जब JVM एक नए ऑब्जेक्ट के लिए स्थान आवंटित करने में असमर्थ है (याद रखें: नई वस्तुएं हमेशा युवा पीढ़ी के ईडन क्षेत्र में आवंटित की जाती हैं)।

अगला प्रश्न:

क्या यह एक पूर्ण जीसी द्वारा मतलब है: क) यह दोनों माइनर और मेजर संग्रह मतलब यह है की जाती हैं? या बी) पूर्ण जीसी == प्रमुख संग्रह? इनमें से कौनसा?

और,

इसके अलावा, 4. क्या पूर्ण जीसी केवल OldGeneration या YoungGeneration रूप में अच्छी तरह पर असर पड़ेगा?

यह निर्भर करता है। जेवीएम प्रत्येक प्रमुख संग्रह को पूर्ण जीसी के रूप में रिपोर्ट करता है। [इन झंडे java -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamp] के साथ प्रयास करें।पैडेंटिक परिभाषा यह है कि पूर्ण जीसी माइनर के बाद पहले माइनर चलाता है (यद्यपि पुरानी पीढ़ी पूरी तरह से मुक्त हो जाती है, अगर ऑर्डर यंग जेनरेशन से ऑब्जेक्ट प्राप्त करने की अनुमति देने के लिए पहले किया जाता है)।

ठीक है, बिंदु पर वापस। जेवीएम मेजर कलेक्शन [पुराने (या पर्म) जेनरेशन में] पूर्ण जीसी के रूप में मानता है। नीचे एक प्रोग्राम से आउटपुट हैं जो मैं बिंदु को चित्रित करने के लिए जल्दी से लिखने में सक्षम था। पहली पंक्ति माइनर जीसी है और दूसरा मेजर (पूर्ण) जीसी है। आप देख सकते हैं कि यह केवल पुराने पीढ़ी (सीएमएस) में हुआ था और पुरानी पीढ़ी को 1082 के से 1034 के तक कम करने में सक्षम था।

  • 11.431: [GC 11.431: [ParNew: 1152K->128K(1152K), 0.0009893 secs] 2111K->1210K(6464K), 0.0010182 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]
  • 17.882: [Full GC (System) 17.882: [CMS: 1082K->1034K(5312K), 0.0212614 secs] 2034K->1034K(6464K), [CMS Perm : 9426K->9410K(21248K)], 0.0213200 secs] [Times: user=0.02 sys=0.00, real=0.02 secs]

अगला सवाल:

तो एक), इसका मतलब यह है कि माइनर संग्रह अभी भी एक से अधिक थ्रेड का उपयोग कर, जबकि मेजर किया गया था किया जाता है एकल का उपयोग कर?

हां। मेरे उत्तर की शुरुआत देखें। युवा और वृद्ध पीढ़ी विभिन्न संग्राहकों द्वारा परोसा जाता है। युवा पीढ़ी के लिए, आप निम्न में से किसी एक का उपयोग कर सकते हैं:

  • -XX:+UseSerialGC
  • -XX:+UseParallelGC
  • -XX:+UseParNewGC

पुरानी पीढ़ी के लिए, उपलब्ध विकल्प हैं:

  • -XX:+UseParallelOldGC
  • -XX:+UseConcMarkSweepGC
+1

साफ़ प्रश्न और क्रिस्टल स्पष्ट उत्तर – Imposter

+2

हॉटस्पॉट 6 में भी '-XX: + UseG1GC' भी है (पहले रिलीज़ नहीं, हालांकि) और 7, जो युवा और पुरानी पीढ़ियों दोनों का प्रबंधन करता है। –

0

जबकि भूत का जवाब अभी भी व्यापक स्ट्रोक में सही है, कम से कम इस हिस्से अब पुरानी है:

यह निर्भर करता है। जेवीएम प्रत्येक प्रमुख संग्रह को पूर्ण जीसी के रूप में रिपोर्ट करता है।

सीएमएस और जी 1 दोनों नई पीढ़ी (मामूली) संग्रह, पुरानी पीढ़ी के समवर्ती संग्रह और पूर्ण जीसीएस के बीच अंतर करते हैं। उत्तरार्द्ध एक अंतिम-रिसॉर्ट चीज में से कुछ है और अधिकांश जीसीइंग को नए जीन और समवर्ती संग्रहों द्वारा संभाला जाना चाहिए।

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