2012-04-09 14 views
6

मुझे लगता है कि -Xmx2g के साथ, शीर्ष मेमोरी 1 जी तक पहुंचती है और प्रमुख संग्रह (मार्कवेप कलेक्टर) करता है। -Xmx3g के साथ, यह 1.5 जी तक पहुंचता है और एक बड़ा संग्रह करता है। -Xmg4g के साथ, यह 2 जी तक पहुंचता है और प्रमुख संग्रह करता है। लेकिन, यहां से मैंने 6 जी, 8 जी, 12 जी तक अधिकतम मेमोरी बढ़ाने की कोशिश की और हर बार चोटी की स्मृति 2 जी तक पहुंच जाती है।पीक मेमोरी उपयोग सीमा से परे नहीं जाता

इसे 2 जी से आगे कैसे उपयोग करें? मैं इसके लिए किसी भी सेटिंग में नहीं आया था। क्या -XMS यहाँ मायने रखता है? उन लोगों के लिए- एक्सएमएक्स, मैंने बनाया- एक्सएमएक्स का आधा हिस्सा।

मैं जेटी, जावा 1.6.024 का उपयोग कर रहा हूं।

अद्यतन: हां, मैं 64-बिट जेवीएम का उपयोग कर रहा हूं। जेवीएम विकल्प जो मैं उपयोग कर रहा हूं वे हैं: -Xmx6g -Xms3g -XX: MaxPermSize = 256m जिस तरह से मैं चरम स्मृति का निर्धारण कर रहा हूं वह जेकोनसोल में मेमोरी ग्राफ को देखकर है। यह 2 जी और बूंदों (प्रमुख संग्रह) तक पहुंचता है। पुराना जनरल 1.5 जी अधिकतम तक पहुंचता है और फिर ड्रॉप होता है।

धन्यवाद, प्राम्स।

+4

क्या यह एक उचित धारणा है कि आप 64-बिट JVM का उपयोग कर रहे हैं? यह पूछने लायक है, क्योंकि 32-बिट जेवीएम में 2 जीबी आकार की सीमा है। – duffymo

+0

मुझे लगता है कि यह 64-बिट जेवीएम कहने के लिए सुरक्षित है, क्योंकि जावा प्रोग्राम को चलाने के बिना समाप्त हो जाएगा यदि आप एक हीप आकार को बहुत बड़ा निर्दिष्ट करते हैं 1500 मीटर से अधिक (सटीक सीमा JVM- निर्भर है)। – rob

+0

क्या आपने -XX गुणों के साथ खेलने की कोशिश की? –

उत्तर

1

आपके पास तीन मेमोरी क्षेत्र, ईडन, उत्तरजीवी और कार्यरत स्थान हैं।

मुझे संदेह है कि घटनाएं क्या हैं कि या तो कार्यकाल या ईडन रिक्त स्थान बढ़ रहे हैं क्योंकि आप अधिकतम आकार बढ़ाते हैं।

इन दोनों क्षेत्रों का कारण यह है कि जब कार्यरत स्थान एक पूर्ण जीसी भर जाता है तो मुझे ट्रिगर किया जाता है (मुझे संदेह है कि यह आकार बढ़ रहा है) जब ईडन स्पेस भर जाती है और जीवित जगह में सभी वस्तुओं की प्रतिलिपि बनाने के लिए पर्याप्त जगह नहीं होती है बाएं, एक पूर्ण जीसी भी ट्रिगर किया गया है।

यदि यह आपकी समस्या का कारण है, तो आप बड़ी संख्या में मध्यम जीवित वस्तुओं का निर्माण कर रहे हैं जो प्रदर्शन की समस्या होने की संभावना है, जब तक कि आप बनाए गए नंबर को कम नहीं कर सकते। एक विकल्प एक बड़ा नया आकार निर्दिष्ट करना है जो ईडन आकार को बढ़ाता है।

-mx12g -XX:NewSize=10g - verbosegc

अंतिम विकल्प का प्रयास करें व्यक्तिगत रिक्त स्थान की अपने आकार दे देंगे, जब वे साफ कर रहे हैं।

+0

पीटर, उत्तर के लिए धन्यवाद। मेरे पास एक फॉलो अप प्रश्न है। हमारे ऑब्जेक्ट के बनाए गए आकार में से एक लगभग 4 एमबी है। और हम प्रति मिनट एक ऐसी वस्तु बनाते हैं और इसे एक स्थिर मिनट के ऑब्जेक्ट के साथ एक स्थिर ConcurrentHashMap में प्रतिस्थापित करते हैं। अब तक मैं देख सकता हूं कि यह सबसे बड़ी वस्तु है।बेशक वहां कई अन्य स्ट्रिंग ऑब्जेक्ट्स और अन्य अस्थायी वस्तुएं हैं, लेकिन वे 4 एमबी से बहुत छोटी हैं। क्या यह 3 जी की ईडन स्पेस के लिए बहुत बड़ा आकार है? क्योंकि जब मेरे पास 6 जी था, मैंने 1 के न्यूरेटियो के साथ प्रयास किया और इससे 2 जी से आगे जाने के लिए शीर्ष उपयोग में मदद नहीं मिली। धन्यवाद। – prams

+0

बड़ी वस्तुओं को सीधे कार्यरत स्थान पर आवंटित किया जाता है। यदि आपके पास ऐसी वस्तु है जो वास्तव में बहुत कम वस्तुओं से बना है, तो उन्हें ईडन स्पेस में आवंटित किया जाना चाहिए। इस तरह की बड़ी वस्तुओं के लिए, यदि आप सरल तरीके से कर सकते हैं तो आप उन्हें स्वयं रीसाइक्लिंग से बेहतर कर सकते हैं। –

+0

बड़े आकार में न्यूसाइज सेट करना उच्च चोटी मेमोरी ऑब्जेक्ट्स तक पहुंचने में मदद करता है। धन्यवाद। मैं आपको अपनी कॉन्फ़िगरेशन और हमारे द्वारा बनाए गए ऑब्जेक्ट्स के कुछ विवरण बता दूंगा। और एक प्रश्न पूछेगा (अगली टिप्पणी में)। प्रोफाइलर 2 स्थानों को बहुत मेमोरी का उपभोग करता है: 1) प्रति सेकंड लगभग 5 तार (प्रत्येक 110 केबी) बनाए जाते हैं। 2) एक ऑब्जेक्ट जिसमें 4 ऑब्जेक्ट्स (एक वर्ग का) होता है, एक प्रति मिनट बनाया जाता है और एक स्थिर concurrenthashmap में बदल जाता है (इसलिए मानचित्र में किसी भी समय केवल 1 ऑब्जेक्ट होता है)। उन 4 वस्तुओं में से प्रत्येक 10K arraylists, 10K की तारीख और अन्य तार, आदि – prams

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