दिलचस्प पोस्ट
मैं कैसे डिबग कर सकता हूं क्यों सरल MySQL क्वेरी गलत देता है? मैं फ़ायरफ़ॉक्स या क्रोम के साथ HTTP POST अनुरोधों को मैन्युअल रूप से कैसे फंसा सकता हूं? AppDelegate से UINavigationBar पृष्ठभूमि का रंग कैसे बदल सकता है सी ++ मल्टीचैरैक्टर शाब्दिक एंड्रॉइड एक्लिप्स डीडीएमएस – फ़ाइलों को खींचने के लिए फोन पर डेटा / डेटा / एक्सेस नहीं किया जा सकता है CALayer को पाठ जोड़ें हर कॉरिएट के स्पष्ट घोषणा के बिना आरएम में सूत्र निर्दिष्ट करना पायथन में एक अस्थायी फीफा (नामित पाइप) बनाएँ? स्टोरीबोर्ड में एक uiview xib पुन: उपयोग करें jQuery और AND ऑपरेटर्स का उपयोग करके विशेषता का चयन करें LINQ का सबसे कठिन या सबसे गलतफहमी वाला पहलू क्या है? पाठ को क्लिपबोर्ड पर कॉपी करने के लिए पायथन स्क्रिप्ट एक लिंक पर jQuery / JavaScript में एक क्लिक का अनुकरण करना सी में पिछली पाठ फ़ाइल को पढ़ना एचटीटीपी अनुरोधों और प्रतिक्रियाओं को एचटीटीपी वेबबेट / एचटीटीपी वेबबेशन्स का उपयोग करके फिल्डर में दिखाने के लिए पाएं

स्मृति रिसाव है? क्यों java.lang.ref.Finalizer इतना मेमोरी खाते हैं

मैं अपने प्रोग्राम पर एक ढेर डंप चला गया। जब मैंने इसे मेमोरी विश्लेषक टूल में खोला, मुझे पता चला कि org.logicalcobwebs.proxool.ProxyStatement लिए java.lang.ref.Finalizer बहुत सारी स्मृति ले रहा था। ऐसा क्यों है?

स्क्रीनशॉट

Solutions Collecting From Web of "स्मृति रिसाव है? क्यों java.lang.ref.Finalizer इतना मेमोरी खाते हैं"

कुछ वर्ग Object.finalize() विधि को कार्यान्वित करते हैं। ऐसी ऑब्जेक्ट जो इस विधि को ओवरराइड करते हैं उन्हें पृष्ठभूमि थ्रेड कॉल अंतिम रूप से कॉल करने की आवश्यकता होती है, और जब तक ऐसा नहीं होता तब तक उन्हें साफ नहीं किया जा सकता है। यदि ये कार्य संक्षिप्त हैं और आप इनमें से कई को नहीं छोड़ते तो ये सभी अच्छी तरह से कार्य करते हैं। हालांकि यदि आप इन वस्तुओं में से बहुत से और / या उनके अंतिम निर्माताओं को बहुत लंबा समय लेते हैं, तो अंतिम रूप देने वाले ऑब्जेक्ट की कतार को ऊपर उठाना होगा इस कतार के लिए सभी मेमोरी का उपयोग करना संभव है।

समाधान है

  • यदि आप (यदि आप ऑब्जेक्ट के लिए वर्ग लिख रहे हैं) अंतिम रूप () डी ऑब्जेक्ट का उपयोग न करें तो
  • बहुत कम को अंतिम रूप दें (यदि आपको इसका उपयोग करना है)
  • हर बार ऐसे ऑब्जेक्ट्स को त्याग नहीं करें (उन्हें पुन: उपयोग करने का प्रयास करें)

अंतिम विकल्प आपके लिए सबसे अच्छा होने की संभावना है क्योंकि आप मौजूदा पुस्तकालय का उपयोग कर रहे हैं।

मैं क्या कर सकता हूं, प्रॉक्सीबल जेडीबीसी कनेक्शन के लिए एक कनेक्शन पूल है। इससे मुझे पता चलता है कि समस्या यह है कि आपका आवेदन कनेक्शन पूल का दुरुपयोग कर रहा है। कथन ऑब्जेक्ट्स के close कॉल करने के बजाय, आपका कोड शायद उन्हें और / या उनके मूल कनेक्शन छोड़ रहा है Proxool अंतिम ड्राइवरों पर अंतर्निहित चालक-कार्यान्वित वस्तुओं को बंद करने पर भरोसा कर रहा है … लेकिन इसके लिए उन अंतिम अनुक्रमिक आवृत्तियों की आवश्यकता होती है। इसका यह भी मतलब हो सकता है कि आप कनेक्शन को खोलने / बंद (वास्तविक) डेटाबेस कनेक्शंस की आवश्यकता से अधिक बार कर रहे हैं, और यह प्रदर्शन के लिए खराब होगा

इसलिए मेरा सुझाव है कि आप अपने कोड को लीक हुई परिणामसेट, स्टेटमेंट और / या कनेक्शन ऑब्जेक्ट्स के लिए जांचें और सुनिश्चित करें कि आप उन्हें finally ब्लॉकों में बंद कर दें।


मेमोरी डंप को देखते हुए, मुझे उम्मीद है आप 898,527,228 बाइट्स जा रहे हैं। विशाल बहुमत 2aab07855e38 ऑब्जेक्ट द्वारा बनाए रखा जाता है जिसका आईडी 2 2aab07855e38 । यदि आपके पास अभी भी डंप फ़ाइल है, तो उस पर एक नज़र डालें, जो Finalizer का संदर्भ दे रहा है यह Proxool वस्तुओं की तुलना में अधिक समस्याग्रस्त लग रहा है