मैं एक सर्वर अनुप्रयोग है कि, दुर्लभ अवसरों में, स्मृति के बड़े हिस्से का आवंटन कर सकते हैं परे चला जाता है।बाध्य करें पूरा कचरा संग्रहण जब स्मृति कब्जे एक निश्चित सीमा से
के रूप में यह स्मृति रिसाव नहीं है, इन हिस्सों को कचरा कलेक्टर द्वारा पूर्ण कचरा संग्रह निष्पादित करके वापस दावा किया जा सकता है। सामान्य कचरा संग्रह स्मृति की मात्रा को मुक्त करता है जो बहुत छोटे होते हैं: यह इस संदर्भ में पर्याप्त नहीं है।
कचरा कलेक्टर उपयुक्त मानते समय इन पूर्ण जीसी को निष्पादित करता है, अर्थात् जब अनुप्रयोग की स्मृति पदचिह्न अधिकतम -Xmx के साथ निर्दिष्ट आवंटित अधिकतम के पास होता है।
कि ठीक हो सकता है, अगर यह सच है कि इन समस्याग्रस्त स्मृति आवंटन फटने में आते हैं के लिए नहीं था, और तथ्य यह है कि JVM करने के लिए पर्याप्त जल्दी से एक जीसी प्रदर्शन करने में सक्षम नहीं है की वजह से OutOfMemoryErrors पैदा कर सकता है आवश्यक स्मृति मुक्त करें। अगर मैं मैन्युअल रूप से System.gc() को कॉल करता हूं, तो मैं इस स्थिति को रोक सकता हूं।
वैसे भी, मैं अपने JVM की स्मृति आवंटन अपने आप पर नजर रखने के (या अपने आवेदन के तर्क में स्मृति प्रबंधन सम्मिलित) होने नहीं करना चाहते हैं; यह अच्छा होगा अगर वर्चुअल मशीन को मेमोरी थ्रेसहोल्ड के साथ चलाने का कोई तरीका था, जिस पर पूर्ण जीसी स्वचालित रूप से निष्पादित की जाएगी, ताकि मुझे जिस स्मृति की आवश्यकता हो, उसे बहुत जल्दी रिलीज़ किया जा सके।
लंबी कहानी कम: (? एक कमांड लाइन विकल्प) मैं (यानी एक पूर्ण जीसी प्रदर्शन) आदेश जल्दी स्मृति का एक अच्छा राशि जारी करने के लिए JVM कॉन्फ़िगर करने के लिए जब स्मृति कब्जे एक निश्चित सीमा तक पहुंच जाता कोई तरीका होना चाहिए, मैं डॉन अगर यह थोड़ी देर में हर बार मेरे आवेदन को धीमा कर देता है तो परवाह नहीं है।
अब तक पीढ़ियों के आकार को संशोधित करने के तरीके हैं सभी मैंने पाया है, लेकिन है कि मैं क्या (कम से कम नहीं सीधे) की जरूरत नहीं है।
मैं अपने सुझाव की सराहना करेंगे,
सिल्वियो
पी.एस. मैं बड़े आवंटन से बचने के लिए एक रास्ते पर काम कर रहा हूँ, लेकिन यह एक लंबे समय की आवश्यकता हो सकती है और इस बीच मेरे ऐप एक छोटे से स्थिरता
अद्यतन की जरूरत है: jvisualvm साथ ऐप्लिकेशन का विश्लेषण, मैं देख सकता है कि समस्या में है पुरानी पीढ़ी
मैं पहले से ही इसका उपयोग कर रहा हूं –