2012-08-24 32 views
189

विशेष रूप से, यह PermGen OutOfMemoryError समस्या को ठीक करने में क्यों मदद करेगा?-XX: MaxPermSize क्या करता है?

इसके अलावा

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

+0

http://mark.koli.ch/2009/01/understanding-javas-perm-gen-maxpermsize-heap-space-etc.html –

+5

http://www.oracle.com/technetwork/java/javase /tech/vmoptions-jsp-140102.html अब आप मुझे उन बोनस अंक कैसे देंगे?:) –

+1

@PaulTomblin मुझे यकीन नहीं है कि जिस व्यक्ति का आप लिंक कर रहे हैं (Google द्वारा पहला परिणाम) के बारे में कोई विचार है कि वह किस बारे में बात कर रहा है। –

उत्तर

207

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

This Oracle article संक्षेप काम करने और हॉटस्पॉट जीसी के parameterization प्रस्तुत करता है और आप इस अंतरिक्ष बढ़ाने के लिए अगर आप कई वर्गों लोड (यह आम तौर पर आवेदन सर्वर के लिए मामला और ग्रहण की तरह कुछ आईडीई है) की सलाह है:

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

ध्यान दें कि this other Oracle documentation अन्य हॉटस्पॉट तर्कों को सूचीबद्ध करता है।

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

75

-XX: पर्मसाइज -XX: अधिकतम जनरेशन के लिए आकार सेट करने के लिए MaxPermSize का उपयोग किया जाता है।

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

+9

+1। – Tony

35

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

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

में हटा दिया गया था

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

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

+2

यह भी देखें: [जेडीके 8 में पर्मजेन उन्मूलन] (http://stackoverflow.com/questions/18339707/permgen-elimination-in-jdk-8) (स्टैक ओवरफ्लो)। – will

1

MaxPermSize स्थायी पीढ़ी ढेर के लिए अधिकतम आकार, एक ढेर है कि कक्षाओं की बाइट कोड रखती है और वस्तु वास्तविक उदाहरणों वाले ढेर से अलग रखा जाता है।