परमिट स्पेस क्या है?


88

जावा मेमोरी प्रोफाइलिंग के बारे में सीखते हुए, मैं "हीप" के अलावा "पर्म स्पेस" शब्द को देखता रहता हूं। मुझे पता है कि ढेर क्या है - परमिशन स्पेस क्या है?


13
Java 8 ने इस अवधारणा को पूरी तरह से हटा दिया है और Metaspace
pramodc84

2
संदर्भ यहाँ अच्छी तरह से समझाया गया है youtube.com/watch?v=PUUJ4rNpRhU
shareef

जवाबों:


103

यह स्थायी पीढ़ी के लिए है :

स्थायी पीढ़ी विशेष है क्योंकि यह उपयोगकर्ता कक्षाओं (जावा भाषा का हिस्सा नहीं हैं) का वर्णन करने वाले मेटा-डेटा रखती है। ऐसे मेटा-डेटा के उदाहरण कक्षा और विधियों का वर्णन करने वाली वस्तुएं हैं और इन्हें स्थायी पीढ़ी में संग्रहीत किया जाता है। बड़े कोड-बेस वाले एप्लिकेशन जल्दी से ढेर के इस सेगमेंट को भर सकते हैं जो कारण होगा java.lang.OutOfMemoryError: पर्मेन कोई फर्क नहीं पड़ता कि आपकी मशीन पर कितना -Xmx और कितनी मेमोरी है।


एंड्रयू, मैं सिर्फ यह जानने के लिए उत्सुक हूं कि पेरजेन का आकार क्या हो सकता है?
gks

बस जिज्ञासु अगर permgen हीप मेमोरी का एक हिस्सा है (जैसा कि इस उत्तर में बताया गया है) या यह ऑफ-हीप है (जैसा कि इस उत्तर में कहा गया है - stackoverflow.com/a/31103100/3061686 )।
अक्की

25

Perm spaceलोडेड क्लासेस और कुछ अन्य उन्नत सुविधाओं जैसे String Pool(अत्यधिक अनुकूलित स्ट्रिंग समानता परीक्षण के लिए) रखने के लिए उपयोग किया जाता है , जो आमतौर पर String.intern()विधियों द्वारा बनाई जाती हैं । जैसे ही आपका एप्लिकेशन (कक्षाओं की संख्या) बढ़ेगा, यह स्थान जल्दी से भर जाएगा, क्योंकि इस स्थान पर कचरा संग्रह आवश्यक रूप से साफ करने के लिए अधिक प्रभावी नहीं है, आप जल्दी से मेमोरी से बाहर निकल जाते हैं: जीन स्पेस त्रुटि। उसके बाद, कोई भी एप्लिकेशन उस मशीन पर प्रभावी रूप से नहीं चलेगा, भले ही एक विशाल खाली जेवीएम होने के बाद भी।

अपना आवेदन शुरू करने से पहले आपको java -XX:MaxPermSizeइस त्रुटि से छुटकारा पाना चाहिए ।


स्ट्रिंग पूल जावा 7. के बाद से ढेर अंतरिक्ष में स्थानांतरित हो जाता है
कैफीन कोडर

20

सरल (और ओवरसाइम्प्लिफ़ाइड) उत्तर: यह वह जगह है जहाँ jvm आपके डेटा के विपरीत अपने बहीखाते को संग्रहीत करता है।


17

पर्म जनरल स्थायी पीढ़ी के लिए है जो कक्षाओं के बारे में मेटा-डेटा जानकारी रखती है।

  1. मान लीजिए यदि आप एक वर्ग नाम A बनाते हैं, तो यह उदाहरण चर ढेर स्मृति में संग्रहीत किया जाएगा और वर्ग A स्थैतिक क्लास लोडर के साथ स्थायी पीढ़ी में संग्रहीत किया जाएगा।
  2. कचरा संग्रहकर्ताओं को स्थायी पीढ़ी की मेमोरी में संग्रहीत मेमोरी स्पेस को खाली करना या मुक्त करना मुश्किल होगा। इसलिए यह हमेशा की सलाह दी जाती है कि permgen मेमोरी सेटिंग्स को उचित सीमा तक रखने के लिए।
  3. JAVA8 ने मेटा-स्पेस जनरेशन नामक कॉन्सेप्ट पेश किया है, इसलिए जब आप jdk 1.8 वर्जन का उपयोग करते हैं, तो permgen की आवश्यकता नहीं होती है।

5

Permgen अंतरिक्ष हीप का क्षेत्र है जो आभासी मशीन के सभी प्रतिबिंबित डेटा को अपने पास रखता है, जैसे कि वर्ग और विधि ऑब्जेक्ट।


3

यह कक्षा की परिभाषाओं, स्ट्रिंग पूल, आदि की तरह सामान रखता है, मुझे लगता है कि आप इसे मेटा-डेटा कह सकते हैं।


3

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


2

प्रेमगैन के अंतर्गत क्या मौजूद है: प्रेमघन क्षेत्र में वर्ग क्षेत्र आता है। स्टैटिक फ़ील्ड्स को क्लास लोडिंग के समय भी विकसित किया जाता है, इसलिए वे प्रेमजेन में भी मौजूद हैं। लगातार पूल क्षेत्र जिसमें सभी अपरिवर्तनीय क्षेत्र हैं जो स्ट्रिंग की तरह पूल किए गए हैं, यहां रखे गए हैं। इसके अलावा, क्लास लोडर, ऑब्जेक्ट सरणियों, जेवीएम द्वारा उपयोग की जाने वाली आंतरिक वस्तुओं द्वारा लोड किए गए वर्ग डेटा भी स्थित हैं।


1

PermGen Space स्थायी पीढ़ी के लिए मेमोरी आवंटन के लिए खड़ा है, सभी जावा अपरिवर्तनीय वस्तुएँ इस श्रेणी के अंतर्गत आती हैं, जैसे Stringकि शाब्दिक या String.intern()विधियों के साथ और कक्षाओं को मेमोरी में लोड करने के लिए बनाया जाता है। PermGen Space हमारी स्ट्रिंग समानता खोज को गति देता है।


1
  • जेवीएम में जावा वस्तुओं का आंतरिक प्रतिनिधित्व होता है और उन आंतरिक अभ्यावेदन को ढेर (युवा पीढ़ी या कार्यकाल वाली पीढ़ी) में संग्रहित किया जाता है।
  • जेवीएम में जावा कक्षाओं का आंतरिक प्रतिनिधित्व भी है और जिन्हें स्थायी पीढ़ी में संग्रहीत किया जाता है

यहाँ छवि विवरण दर्ज करें

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