क्या करता है -XX: MaxPermSize करते हैं?


259

विशेष रूप से, यह एक PermGen OutOfMemoryError समस्या को ठीक करने में मदद क्यों करेगा?

इसके अलावा, एक जवाब के लिए बोनस अंक जो मुझे JVM तर्कों पर प्रलेखन की ओर इशारा करता है ...



6
oracle.com/technetwork/java/javase/tech/… अब आप मुझे वे बोनस अंक कैसे देंगे? :)
डेनिस सेगुरेट

1
@PaulTomblin मुझे यकीन नहीं है कि जिस व्यक्ति का लेख आप (Google द्वारा पहला परिणाम) से जोड़ रहे हैं, उसके बारे में कोई भी विचार नहीं है।
डेनस सेगुरेट

@ डस्ट्रोय मैं आपको कुकी भेज सकता हूं? या आप सिर्फ एक प्रश्न के उत्तर में अच्छी तरह से संतुष्टि ले सकते हैं;)
ज्योफ

5
यह विशेष रूप से इस सवाल का जवाब नहीं देता है, लेकिन अगर आप जेवीएम मेमोरी मैनेजमेंट को देख रहे हैं, तो मैंने इस पर जो सबसे अच्छे लेख पढ़े हैं वे इस और इस जानकारी लिंक हैं
अबे

जवाबों:


273

स्थायी स्थान वह जगह है जहां VM द्वारा उपयोग की जाने वाली कक्षाएं, विधियां, आंतरिक स्ट्रिंग्स और इसी तरह की वस्तुओं को संग्रहीत किया जाता है और कभी भी नहीं हटाया जाता है (इसलिए नाम)।

यह ओरेकल लेख सफलतापूर्वक हॉटस्पॉट जीसी के कामकाज और परिमाणीकरण को प्रस्तुत करता है और यदि आप कई कक्षाएं लोड करते हैं तो यह स्थान बढ़ाने के लिए आपको सलाह देता है (यह आमतौर पर एप्लिकेशन सर्वर और कुछ आईडीई जैसे ग्रहण के लिए मामला है):

अधिकांश अनुप्रयोगों के लिए स्थायी पीढ़ी का कचरा कलेक्टर के प्रदर्शन पर ध्यान देने योग्य प्रभाव नहीं होता है। हालांकि, कुछ एप्लिकेशन गतिशील रूप से कई कक्षाओं को उत्पन्न और लोड करते हैं; उदाहरण के लिए, JavaServer Pages (JSP) पृष्ठों के कुछ कार्यान्वयन। इन अनुप्रयोगों को अतिरिक्त कक्षाएं रखने के लिए एक बड़ी स्थायी पीढ़ी की आवश्यकता हो सकती है। यदि ऐसा है, तो अधिकतम स्थायी पीढ़ी का आकार कमांड-लाइन विकल्प -XX के साथ बढ़ाया जा सकता है: MaxPermSize =।

ध्यान दें कि यह अन्य ओरेकल प्रलेखन अन्य हॉटस्पॉट तर्कों को सूचीबद्ध करता है।

अपडेट: जावा 8 से शुरू होकर, परमिशन स्पेस और यह सेटिंग दोनों चले गए हैं। लोड की गई कक्षाओं और विधियों के लिए उपयोग किया जाने वाला मेमोरी मॉडल अलग है और सीमित नहीं है (डिफ़ॉल्ट सेटिंग्स के साथ)। आपको इस त्रुटि को और नहीं देखना चाहिए।


93

-XX:PermSize -XX:MaxPermSize स्थायी पीढ़ी के लिए आकार निर्धारित करने के लिए उपयोग किया जाता है।

परमानेंट जेनरेशन: परमानेंट जेनरेशन वह है जहां क्लास फाइल्स रखी जाती हैं। ये संकलित कक्षाओं और JSP पृष्ठों का परिणाम हैं। यदि यह स्थान भरा हुआ है, तो यह एक पूर्ण कचरा संग्रह को ट्रिगर करता है। यदि पूर्ण कचरा संग्रह पुरानी अप्रतिबंधित कक्षाओं को साफ नहीं कर सकता है और स्थायी स्थान का विस्तार करने के लिए कोई जगह नहीं बची है, तो आउट ऑफ मेमोरी मेमोरी (OOME) फेंक दी जाती है और JVM क्रैश हो जाएगा।


48

जावा 8 में उस पैरामीटर को आमतौर पर इस तरह एक चेतावनी संदेश प्रिंट करने के लिए उपयोग किया जाता है:

जावा हॉटस्पॉट (टीएम) 64-बिट सर्वर वीएम चेतावनी: अनदेखा करने का विकल्प MaxPermSize = 512m; 8.0 में समर्थन हटा दिया गया था

जावा 8 में आपको यह संदेश क्यों मिलता है इसका कारण यह है कि पर्मगेन को पेप्सेन की कुछ कमियों को दूर करने के लिए मेटस्पैस द्वारा प्रतिस्थापित किया गया है (जैसा कि आप अपने लिए देख पा रहे थे, उन कमियों में से एक यह है कि इसका एक निश्चित आकार था)।

FYI करें: Metaspace पर एक लेख: http://java-latte.blogspot.in/2014/03/metaspace-in-java-8.html


6
इसे भी देखें: JDK 8 (स्टैकओवरफ्लो) में पर्मेन एलिमिनेशन
होगा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.