जावा मेमोरी प्रोफाइलिंग के बारे में सीखते हुए, मैं "हीप" के अलावा "पर्म स्पेस" शब्द को देखता रहता हूं। मुझे पता है कि ढेर क्या है - परमिशन स्पेस क्या है?
जावा मेमोरी प्रोफाइलिंग के बारे में सीखते हुए, मैं "हीप" के अलावा "पर्म स्पेस" शब्द को देखता रहता हूं। मुझे पता है कि ढेर क्या है - परमिशन स्पेस क्या है?
जवाबों:
स्थायी पीढ़ी विशेष है क्योंकि यह उपयोगकर्ता कक्षाओं (जावा भाषा का हिस्सा नहीं हैं) का वर्णन करने वाले मेटा-डेटा रखती है। ऐसे मेटा-डेटा के उदाहरण कक्षा और विधियों का वर्णन करने वाली वस्तुएं हैं और इन्हें स्थायी पीढ़ी में संग्रहीत किया जाता है। बड़े कोड-बेस वाले एप्लिकेशन जल्दी से ढेर के इस सेगमेंट को भर सकते हैं जो कारण होगा
java.lang.OutOfMemoryError
: पर्मेन कोई फर्क नहीं पड़ता कि आपकी मशीन पर कितना -Xmx और कितनी मेमोरी है।
Perm space
लोडेड क्लासेस और कुछ अन्य उन्नत सुविधाओं जैसे String Pool
(अत्यधिक अनुकूलित स्ट्रिंग समानता परीक्षण के लिए) रखने के लिए उपयोग किया जाता है , जो आमतौर पर String.intern()
विधियों द्वारा बनाई जाती हैं । जैसे ही आपका एप्लिकेशन (कक्षाओं की संख्या) बढ़ेगा, यह स्थान जल्दी से भर जाएगा, क्योंकि इस स्थान पर कचरा संग्रह आवश्यक रूप से साफ करने के लिए अधिक प्रभावी नहीं है, आप जल्दी से मेमोरी से बाहर निकल जाते हैं: जीन स्पेस त्रुटि। उसके बाद, कोई भी एप्लिकेशन उस मशीन पर प्रभावी रूप से नहीं चलेगा, भले ही एक विशाल खाली जेवीएम होने के बाद भी।
अपना आवेदन शुरू करने से पहले आपको java -XX:MaxPermSize
इस त्रुटि से छुटकारा पाना चाहिए ।
पर्म जनरल स्थायी पीढ़ी के लिए है जो कक्षाओं के बारे में मेटा-डेटा जानकारी रखती है।
पर्मगेन स्पेस को हमेशा मेथड एरिया के रूप में जाना जाता है। जब क्लास लोडर सबसिस्टम क्लास फाइल (बाइट कोड) को मेथड एरिया (पर्मगेन) पर लोड करेगा। इसमें सभी वर्ग मेटाडेटा जैसे: आपकी कक्षा का पूरी तरह से योग्य नाम, तत्काल अभिभावक वर्ग का पूरी तरह से योग्य नाम, चर जानकारी, कंस्ट्रक्टर की जानकारी, निरंतर पूल इन्फोर आदि।
प्रेमगैन के अंतर्गत क्या मौजूद है: प्रेमघन क्षेत्र में वर्ग क्षेत्र आता है। स्टैटिक फ़ील्ड्स को क्लास लोडिंग के समय भी विकसित किया जाता है, इसलिए वे प्रेमजेन में भी मौजूद हैं। लगातार पूल क्षेत्र जिसमें सभी अपरिवर्तनीय क्षेत्र हैं जो स्ट्रिंग की तरह पूल किए गए हैं, यहां रखे गए हैं। इसके अलावा, क्लास लोडर, ऑब्जेक्ट सरणियों, जेवीएम द्वारा उपयोग की जाने वाली आंतरिक वस्तुओं द्वारा लोड किए गए वर्ग डेटा भी स्थित हैं।
PermGen Space स्थायी पीढ़ी के लिए मेमोरी आवंटन के लिए खड़ा है, सभी जावा अपरिवर्तनीय वस्तुएँ इस श्रेणी के अंतर्गत आती हैं, जैसे String
कि शाब्दिक या String.intern()
विधियों के साथ और कक्षाओं को मेमोरी में लोड करने के लिए बनाया जाता है। PermGen Space हमारी स्ट्रिंग समानता खोज को गति देता है।