जेडीके 8 में परमिशन खत्म


229

मैंने JDK 8 स्थापित किया है और ग्रहण को चलाने की कोशिश कर रहा हूं। मुझे चेतावनी संदेश निम्नलिखित मिल रहा है:

Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=512m;
support was removed in 8.0 

इस वीएम विकल्प को अनदेखा करने के क्या कारण हैं?


4
आपको यह जानकारीपूर्ण लग सकती है: javaeesupportpatterns.blogspot.co.uk/2013/02/…
एंड्रयू मार्टिन

जवाबों:


358

इन दलीलों को नजरअंदाज करने के कारणों को स्थायी कमियों के कारण JDK8 के लिए हॉटस्पॉट में हटा दिया गया है

  • स्टार्टअप पर निश्चित आकार - धुन करने में मुश्किल।
  • आंतरिक हॉटस्पॉट प्रकार जावा ऑब्जेक्ट थे: पूर्ण जीसी, अपारदर्शी के साथ आगे बढ़ सकते हैं, दृढ़ता से टाइप नहीं किए जा सकते हैं और डीबग-मेटाडाटा की आवश्यकता के लिए कठिन हो सकते हैं।
  • पूर्ण संग्रह को सरल बनाएं: प्रत्येक कलेक्टर के लिए मेटाडेटा के लिए विशेष पुनरावृत्तियों
  • जीसी ठहराव के दौरान वर्ग डेटा को समवर्ती रूप से निपटाना चाहते हैं
  • PermGen द्वारा सीमित भविष्य के सुधारों को सक्षम करें।

स्थायी पीढ़ी (PermGen) स्थान को पूरी तरह से हटा दिया गया है और यह एक नई जगह से बदल दिया गया है जिसे Metaspace कहा जाता है। PermGen को हटाने के परिणाम स्पष्ट है कि PermSize और MaxPermSize JVM तर्कों को अनदेखा किया जाता है और आपको कभी java.lang.OutOfMemoryError: PermGen त्रुटि नहीं मिलेगी।

मेटास्पेस के लाभ

  • जावा लैंग्वेज स्पेसिफिकेशन प्रॉपर्टी का लाभ उठाएं: क्लास और संबंधित मेटाडेटा लाइफटाइम्स क्लास लोडर से मेल खाते हैं
  • प्रति लोडर भंडारण क्षेत्र - मेटास्पेस
  • रैखिक आवंटन केवल
  • कोई व्यक्तिगत पुनर्विचार (RedefineClasses और क्लास लोडिंग विफलता को छोड़कर)
  • कोई जीसी स्कैन या संघनन नहीं
  • मेटास्टेस वस्तुओं के लिए कोई स्थानांतरण नहीं

मेटास्पैस ट्यूनिंग

अधिकतम मेटासैप आकार को -XX: मैक्समैटेसैसेज़ ध्वज का उपयोग करके सेट किया जा सकता है, और डिफ़ॉल्ट असीमित है, जिसका अर्थ है कि केवल आपकी सिस्टम मेमोरी की सीमा है। -XX: मेटास्पैसिज़ ट्यूनिंग फ्लैग मेटासैप्स के प्रारंभिक आकार को परिभाषित करता है। यदि आप इस ध्वज को निर्दिष्ट नहीं करते हैं, तो मेटाबेस सक्रिय रूप से रनटाइम पर एप्लिकेशन की मांग के आधार पर पुन: आकार देगा।

परिवर्तन भविष्य में अन्य अनुकूलन और सुविधाएँ सक्षम करता है

  • अनुप्रयोग वर्ग डेटा साझाकरण
  • युवा संग्रह अनुकूलन, जी 1 वर्ग उतराई
  • मेटाडाटा आकार में कटौती और आंतरिक जेवीएम पदचिह्न परियोजनाएं

जीसी प्रदर्शन में भी सुधार हुआ है। ज्यादा जानकारी


29
मुझे इस बात का उल्लेख करना चाहिए कि इंटर्नेट किए गए तार पहले
पर्मजेन स्पेस में रखे

विस्तृत विवरण के लिए धन्यवाद।
प्रदीप

3
सामान्य श्रोताओं के लिए थोड़ा सा परिचय (मेरा मतलब मुख्य रूप से गैर-जावा लोगों से है, उदाहरण के लिए जेवीएम से निपटने के लिए साथी साथी) इस उत्तर में नुकसान नहीं पहुंचाएंगे।
ulidtko

117

यह जावा 8 की नई विशेषताओं में से एक है, JDK एन्हांसमेंट प्रस्ताव 122 का हिस्सा :

हॉटस्पॉट JVM से स्थायी पीढ़ी निकालें और इस प्रकार स्थायी पीढ़ी के आकार को ट्यून करने की आवश्यकता है।

जावा 8 में शामिल किए जाने वाले सभी जेईपी की सूची JDK8 मील के पत्थर के पृष्ठ पर पाई जा सकती है ।


19

स्थायी जनरेशन (PermGen) स्पेस को पूरी तरह से हटा दिया गया है और इसे Metaspace नामक एक नए स्थान से बदल दिया गया है। PermGen को हटाने के परिणाम जाहिर है कि PermSize और MaxPermSize JVM तर्कों को नजरअंदाज कर दिया गया है और आपको कभी नहीं मिलेगा java.lang.OutOfMemoryError: PermGen त्रुटि। जेडीके 8 हॉटस्पॉट जेवीएम अब क्लास मेटाडेटा के प्रतिनिधित्व के लिए देशी मेमोरी का उपयोग कर रहा है और इसे मेटासैपेस कहा जाता है। और पढ़ें >>


3
'हॉटस्पॉट जेवीएम अब क्लास मेटाडेटा के प्रतिनिधित्व के लिए देशी मेमोरी का उपयोग कर रहा है। - और पहले से इस्तेमाल की जाने वाली मेमोरी हॉटस्पॉट जेवीएम क्या है? और 'देशी स्मृति' क्या है?
एंड्री एम। स्टेपानोव


12

PermGen Space को Java 8 में MetaSpace द्वारा बदल दिया जाता है। PermSize और MaxPermSize JVM तर्कों को नजरअंदाज कर दिया जाता है और स्टार्ट-अप में मौजूद होने पर चेतावनी जारी की जाती है।

वर्ग मेटाडेटा के लिए अधिकांश आवंटन अब देशी मेमोरी से आवंटित किए गए हैं। * वर्ग मेटाडेटा का वर्णन करने के लिए उपयोग की जाने वाली कक्षाएं हटा दी गई हैं।

पुराने PermGen और नए मेटास्पेस के बीच मुख्य अंतर है, आपको मेमोरी उपयोग की ऊपरी सीमा को अनिवार्य रूप से परिभाषित करने की आवश्यकता नहीं है। आप मेटास्पेस स्पेस लिमिट अनबाउंड रख सकते हैं। इस प्रकार जब मेमोरी का उपयोग बढ़ जाता है तो आपको आउटऑफमेरी एरर त्रुटि नहीं मिलेगी। इसके बजाय आरक्षित देशी मेमोरी को मेमोरी मेमोरी के उपयोग को पूरा करने के लिए बढ़ाया जाता है।

आप मेटास्पेस के लिए अंतरिक्ष की अधिकतम सीमा को परिभाषित कर सकते हैं, और फिर यह आउटऑफमेरी शोर: मेटाडाटा स्थान को फेंक देगा। इस प्रकार इस सीमा को सावधानीपूर्वक परिभाषित करना महत्वपूर्ण है, ताकि हम स्मृति अपशिष्ट से बच सकें।


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.