2012-12-20 23 views
7

LogManager की विधि getLogger() का वर्णन में, यह निम्नलिखित लिखा है:LogManager और कचरा कलेक्टर

"(...) स्ट्रिंग नाम के साथ संबद्ध लॉगर कचरा किसी भी समय अगर पर एकत्र किया जा सकता लॉगर के लिए कोई मजबूत संदर्भ नहीं है। इस विधि के कॉलर को उस मामले को सही तरीके से संभालने के लिए शून्य के लिए वापसी मूल्य की जांच करनी चाहिए जहां लॉगर कचरा एकत्रित किया गया है। "

यह कैसे संभव है कि जीसी लॉगर मिटा सकता है, क्योंकि LogManager को लॉगर्स के नामों को हल करने में सक्षम होने के लिए सभी लॉगर्स को सभी संदर्भ रखना पड़ता है?

क्या यह थोड़ा अजीब बात नहीं है कि जावा एपीआई एक स्थिति की अनुमति देता है, कि मेरे ऐप की शुरुआत में मैं अपने लॉगर्स बना और सेटअप करता हूं लेकिन रिफ्रेंस को रखना भूल जाता हूं, और बाद में अगर मैं Logger.getLogger ('someName) का उपयोग करता हूं ') मुझे अपने लॉगर्स के नए, डिफ़ॉल्ट एक इंस्टैड मिलेगा जो मैंने स्थापित किया था?

उत्तर

7

यह कैसे संभव है कि जीसी लॉगर मिटा सकता है, क्योंकि LogManager को लॉगर्स के नामों को हल करने में सक्षम होने के लिए सभी लॉगर्स को सभी संदर्भ रखना पड़ता है?

अगर LogManager वालों (जो मेरा मानना ​​है कि यह करता है) के लिए weak references रहता है यह संभव है।

कि थोड़ा अजीब नहीं है, कि जावा एपीआई एक स्थिति की अनुमति देता है, कि मेरे ऐप के शुरू में मैं अपने संग्रह करने वालों बना सकते हैं और सेटअप लेकिन refrences रखने के लिए भूल जाते हैं, और फिर बाद में अगर मैं Logger.getLogger (का उपयोग 'someName') मुझे अपने लॉगर्स के नए, डिफ़ॉल्ट एक इंस्टैड मिलेगा जो मैंने स्थापित किया था?

कोई यह तर्क दे सकता है कि, यदि आप अपने लॉगर की परवाह करते हैं, तो आपको इसका संदर्भ रखना चाहिए। documentation उस पर बहुत स्पष्ट है:

आवेदन यह कचरा जा रहा एकत्र से बचने के लिए लॉगर वस्तु के लिए अपने स्वयं के संदर्भ संपर्क करना चाहिए। LogManager केवल एक कमजोर संदर्भ बनाए रख सकता है।

संबंधित मुद्दे