ब्लॉग पोस्ट के अनुसार जावा जेवीएम के लिए -XX विकल्पों की सबसे पूरी सूची , यह निर्धारित करती है कि सीएमएस कचरा कलेक्टर के तहत कक्षा अनलोडिंग सक्षम है या नहीं। डिफ़ॉल्ट है false
। एक अन्य विकल्प है जिसे डिफ़ॉल्ट रूप से कहा जाता ClassUnloading
है true
जो (संभवतः) अन्य कचरा संग्रहकर्ताओं को प्रभावित करता है।
यह विचार यह है कि यदि जीसी यह पता लगाता है कि पहले से लोड किए गए वर्ग का उपयोग अब जेवीएम में कहीं भी नहीं किया गया है, तो यह क्लास बाइटकोड और / या मूल कोड को रखने के लिए उपयोग की गई मेमोरी को पुनः प्राप्त कर सकता है।
यदि आप वर्तमान में CMS संग्राहक का उपयोग कर रहे हैं, तो CMSClassUnloadingEnabled की स्थापना आपकी अनुमति समस्या के साथ मदद कर सकती है । लेकिन संभावना है कि आप सीएमएस का उपयोग नहीं कर रहे हैं, या आपके पास एक वास्तविक क्लास लोडर संबंधित मेमोरी लीक है। बाद के मामले में, आपकी कक्षा कभी भी अप्रयुक्त होने के लिए जीसी को दिखाई नहीं देगी ... और इसलिए कभी भी अनलोड नहीं होगी।
आरोन दिगुल्ला कहते हैं "कक्षाएं हमेशा के लिए हैं"। यह कड़ाई से सच नहीं है, यहां तक कि विशुद्ध रूप से जावा दुनिया में भी। वास्तव में, एक वर्ग का जीवनकाल उसके वर्ग-भार से बंधा होता है। इसलिए यदि आप यह व्यवस्था कर सकते हैं कि एक क्लास-लोडर कचरा एकत्र किया जाता है (और यह हमेशा एक आसान काम नहीं है) तो जिन कक्षाओं में यह लोड होता है, वे भी एकत्र किए जाएंगे।
वास्तव में, यह तब होता है जब आप किसी वेबएप के हॉट रेडेप्लो करते हैं। (या कम से कम, यही होना चाहिए, यदि आप उन समस्याओं से बच सकते हैं जो एक पर्मेन स्टोरेज लीक की ओर ले जाती हैं।)
CMSClassUnloadingEnabled
किसी भी प्रभाव पड़ता है,UseConcMarkSweepGC
यह भी निर्धारित किया जाना चाहिए