2012-03-03 16 views
21

मुझे आश्चर्य है कि जावा में पूर्ण कचरा संग्रह को ट्रिगर करने वाली सटीक स्थितियां क्या हैं।जावा में एक पूर्ण कचरा संग्रह क्या ट्रिगर करता है?

स्पष्ट हैं:

  • जनरल
  • वर्ष जनरल
  • पर्म समाप्त होने वाले हैं समाप्त होने वाले हैं System.gc कॉलिंग()

क्या अन्य मामलों है कि पूरा का कारण के बारे में जीसी? विशेष रूप से:

  • ईडन से वस्तुओं की प्रतिलिपि बनाने के लिए उत्तरजीवी अंतरिक्ष में पर्याप्त खाली स्थान नहीं है।
  • छोटे संग्रह नई वस्तुओं की आवंटन दर से निपटने में सक्षम नहीं हैं (हालांकि कैसे पता नहीं)।

मैं सन जावा 1.6 चला रहा हूं और नई जेन के लिए समवर्ती मार्क-स्वीप और परन्यू का उपयोग कर रहा हूं।

+0

चूंकि चिन बून का सुझाव है, उनमें से कोई भी "स्पष्ट" जरूरी नहीं है कि वह पूर्ण जीसी का नेतृत्व करे, यह पूरी तरह से सक्रिय कचरा कलेक्टर एल्गोरिदम काम करता है इस पर निर्भर करता है। विशेष रूप से, यह मेरी समझ है कि बहुत सारे कचरा कलेक्टर 'System.gc() 'को अनदेखा करते हैं। (और यह न भूलें कि जीसी एल्गोरिदम के लिए "पूर्ण संग्रह" की अवधारणा भी नहीं है - यह शायद दूर-दराज लग सकता है लेकिन मैंने [जी 1 कलेक्टर] नहीं देखा है (http: // www .oracle.com/technetwork/java/javase/tech/g1-intro-jsp-135488.html) हमारे ऐप्स पर ऐसा करें।) –

+0

आपको लगता है कि जी 1 के साथ जेवीएम हेप स्पेस से बाहर होने पर क्या करता है? आवंटित करते रहें? जब तक यह स्मृति मुक्त नहीं हो जाता है तब तक इसे सब कुछ रोकना होगा। एक स्विच है जो सिस्टम.gc() संकेत को स्पष्ट रूप से बंद कर देता है, लेकिन मैंने डिफ़ॉल्ट रूप से इसे अनदेखा कर सीएमएस या जी 1 नहीं देखा है। –

+0

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

उत्तर

4

मैं एक और स्थिति है कि Ubuntu पर जावा हॉटस्पॉट वी एम 1.6 64 बिट में एक पूर्ण जीसी से चलाता है, समवर्ती मार्क-स्वीप का उपयोग कर मनाया गया है:

-XX हैं: MaxPermSize (: PermSize मूल्य -xx के बराबर नहीं है उदाहरण के लिए छोटा है), कभी-कभी पूर्ण जीसी तब होता है जब जावा को पर्मजेन का विस्तार करने की आवश्यकता होती है (भले ही इसे MaxPermSize की तुलना में अधिक स्मृति आवंटित करने की आवश्यकता नहीं है)। तो सेटिंग -XX: पर्मसाइज और -XX: MaxPermSize समान होना एक अच्छा विचार जैसा लगता है।

+0

यह एक स्वीकार्य उत्तर कैसा है? PermGenSpace का पूर्ण जीसी पर कोई प्रभाव नहीं पड़ता है। क्या आपका मतलब xmx और xms params है? – Amareswar

+0

@ अमरेश्वर ओरेकल कहते हैं: "स्थायी पीढ़ी को पूर्ण कचरा संग्रह में शामिल किया गया है" – Gamby

2

यह आपके जेवीएम विकल्पों और जेवीएम पर निर्भर करता है जो आप उपयोग कर रहे हैं।

इसी कारण से, मैं अनुशंसा करता हूं कि आप "जावा प्रदर्शन" पुस्तक जॉन और हंट पुस्तक देखें।

+1

को कम या ज्यादा कर सकता है हालांकि कुछ सामान्य नियम कम से कम प्रति JVM कार्यान्वयन और कचरा कलेक्टर। –

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