हम कई कक्षाओं के साथ स्कैला में एक बड़ा जीयूआई ऐप लिख रहे हैं, और हमें सभी वर्गों को लोड करने में सक्षम होने के लिए पर्मजेन स्पेस को बढ़ाना पड़ा है। ऐप स्वयं स्क्रीन-आधारित गतिविधियों की एक श्रृंखला दिखाता है, जिनमें से प्रत्येक कक्षाओं का अपना बड़ा सेट लोड करता है। किसी भी समय केवल एक गतिविधि को लोड/प्रदर्शित किया जाता है। कुछ गतिविधियों के माध्यम से जाने के बाद, हमारे पास PermGen अंतरिक्ष में OutOfMemoryError
था।कई क्लासलोडर्स के साथ PermGen स्पेस को सहेजना
मैं समझता हूं कि परमजेन स्पेस garbage collected just like the rest of the heap है, लेकिन मुझे यह देखने में दिलचस्पी है कि क्या मैं Permmen स्पेस को कम करके आवश्यकता कर सकता हूं प्रति ClassLoader
प्रति गतिविधि ताकि वर्ग अनलोडिंग की अनुमति दी जा सके।
तो:
- मैं समझता हूँ प्रणाली classloader द्वारा लोड कक्षाएं, उतार नहीं किया जा सकता है कि के रूप में वे हमेशा के लिए अपने वर्ग लोडर द्वारा संदर्भित कर दिया जाएगा। क्या यह सच है?
- बशर्ते मेरे कस्टम क्लास लोडर द्वारा लोड की गई कक्षा के कोई और उदाहरण न हों, और क्लास लोडर कचरा एकत्र किया जा सकता है, क्या इसकी कक्षाएं अनलोड हो जाएंगी, पर्मजेन स्पेस को मुक्त कर दिया जाएगा?
- क्या कक्षाएं उतारने से संबंधित कोई चेतावनी (या सामान्य गलतियों को रोकती है) हैं?
आपका पर्मजेन कितना बड़ा है? –
128 मीटर बहुत छोटा है, अब 256 मीटर काम करता है, लेकिन कितनी देर तक? ... –