मुझे लगता है कि आपको JVM काम करने के तरीके पर गलतफहमी है। यह एक जीसी मुद्दा या "कार्य" मुद्दा नहीं है।
आपके कार्यों में मेमोरी लीक है या वे अधिक से अधिक स्मृति को पकड़ने के लिए डिज़ाइन किए गए हैं।
-Xmx1024m अधिकतम स्मृति को जेएमएम आवंटित कर सकता है सेट करता है। यह वही बात होगी जैसे आपके पास केवल 1024 मेगापिक्सल भौतिक मेमोरी है और वर्चुअल मेमोरी नहीं है।
कार्य की परिभाषा के साथ अपने प्रश्न को अपडेट करना सहायक होगा। क्या ये 5 अलग जेवीएम हैं? या एक एकल JVM में काम के केवल 5 इकाइयां।
अद्यतन
मैं इस कार्यक्रम सभी 1g ढेर हमेशा उपयोग करने का इरादा नहीं है। मेरा इरादा है कि जेवीएम को 512 एम ढेर का उपयोग करने के लिए निर्देश देना है यदि आवश्यक हो तो केवल और मेमोरी का उपयोग कर सकते हैं। जब स्मृति की आवश्यकता नहीं होती है, तो 512 मीटर या यहां तक कि कम मात्रा में स्मृति गिरने के लिए।
सिर्फ इसलिए कि आप सेट करते हैं -Xmx1024m का मतलब यह नहीं है कि JVM सभी स्मृति का उपयोग करेगा। यह सिर्फ अधिकतम सीमा है। एक्सएमएस सेट करने के लिए न्यूनतम मात्रा में स्मृति सेट करने के लिए सेट अप करें। आपका कार्यक्रम आखिरकार उपयोग की जा रही स्मृति की चलती मात्रा निर्धारित करता है। यदि यह -एक्सएमएक्स द्वारा निर्धारित सीमा को हिट करता है तो यह आउटऑफमेमरी एरर
फेंक देगा आप System.gc()
का आह्वान करके कचरा कलेक्टर चलाने के लिए JVM को सुझाव दे सकते हैं। नोटिस मैंने सुझाव दिया, आप जीसी को चलाने के लिए मजबूर नहीं कर सकते हैं। आप ऐसे मंच पर चल रहे हैं जो जीसी करने से इनकार कर देता है। आपको यह भी देखना होगा कि जीसी एल्गोरिदम आपके एप्लिकेशन के लिए क्या चुन रहा है। मैं यहां Tuning Garbage Collector देखता हूं।
यदि आपको स्मृति उपयोग पर ऐसे अच्छे अनाज नियंत्रण की आवश्यकता है तो आपको JVM के अलावा कुछ और चुनना होगा।
स्रोत
2012-06-20 15:51:28
आप कैसे अंतर कर रहे हैं कि कौन से कार्यों का उपयोग स्मृति की मात्रा का उपयोग करता है? – Poindexter
इससे कोई फ़र्क क्यों पड़ता है कि कितना कार्य 1-4 उपयोग करता है? वैसे भी आप पूरे कार्यक्रम के लिए पहले से ही एक गीगाबाइट आवंटित कर चुके हैं। –
@Poindexter मैं एक कमांड लाइन पैरामीटर पास करता हूं यह इंगित करने के लिए कि कौन सा कार्य चलाना है। फिर मैं कार्यक्रम के स्मृति उपयोग को देखने के लिए 'prstat' का उपयोग करता हूं। – Raihan