मैंने अपने कार्यक्रम पर एक ढेर डंप चलाया। जब मैंने इसे मेमोरी विश्लेषक टूल में खोला, तो मैंने पाया कि org.logicalcobwebs.proxool.ProxyStatement
के लिए बहुत सारी मेमोरी ले रही थी। ऐसा क्यों है?स्मृति रिसाव है? java.lang.ref.Finalizer इतनी मेमोरी खाती है
उत्तर
कुछ वर्गों Object.finalize()
विधि को लागू। ऑब्जेक्ट्स जो इस विधि को ओवरराइड करते हैं उन्हें पृष्ठभूमि थ्रेड कॉल फ़ाइनलाइज़र द्वारा कॉल करने की आवश्यकता होती है, और जब तक ऐसा नहीं होता तब तक उन्हें साफ़ नहीं किया जा सकता है। यदि ये कार्य कम हैं और आप इनमें से कई को त्याग नहीं देते हैं तो यह सब ठीक काम करता है। हालांकि यदि आप इन वस्तुओं में से बहुत सारे बना रहे हैं और/या उनके फाइनलरों में काफी समय लगता है, तो ऑब्जेक्ट्स की कतार को अंतिम रूप दिया जाना चाहिए। इस कतार के लिए सभी मेमोरी का उपयोग करना संभव है।
समाधान है
- को अंतिम रूप देने() घ वस्तुओं का उपयोग नहीं करते, तो आप (यदि आप वर्ग वस्तु के लिए लिख रहे हैं) कर सकते हैं
- बहुत ही कम को अंतिम रूप देने बनाना (आप इसे उपयोग करने के लिए है, तो)
- इस तरह की वस्तुओं हर बार त्यागने नहीं है (करने के लिए उन्हें फिर से उपयोग)
अंतिम विकल्प के रूप में आप एक मौजूदा पुस्तकालय का उपयोग कर रहे आपके लिए सबसे अच्छा होने की संभावना है की कोशिश करो।
विकल्प # 4 - पुस्तकालयों का उपयोग करने से बचें जो (ओवर-) फ़ाइनलाइज़र का उपयोग करते हैं। –
विकल्प # 1 की एक भिन्नता;) –
शायद समस्या फ़ाइनलाइज़र थ्रेड का कारण है। एक वर्ग फाइनल मेथॉन्ड को ओवरराइड करता है, फ़ाइनलाइज़र थ्रेड मृत लॉक – fuyou001
जो मैं कर सकता हूं उससे, प्रॉक्सूल जेडीबीसी कनेक्शन के लिए एक कनेक्शन पूल है। इससे मुझे पता चलता है कि समस्या यह है कि आपका आवेदन कनेक्शन पूल का दुरुपयोग कर रहा है। कथन ऑब्जेक्ट्स पर close
पर कॉल करने के बजाय, आपका कोड शायद उन्हें और/या उनके मूल कनेक्शन छोड़ रहा है। प्रॉक्सूल अंतर्निहित ड्राइवर-लागू वस्तुओं को बंद करने के लिए अंतिम रूपकों पर निर्भर है ... लेकिन इसके लिए उन अंतिम उदाहरणों की आवश्यकता है। इसका मतलब यह भी हो सकता है कि आप आवश्यकतानुसार कनेक्शन को खोलने/बंद करने (वास्तविक) डेटाबेस कनेक्शन को अधिक बार उत्पन्न कर रहे हैं, और यह प्रदर्शन के लिए खराब होगा।
तो मेरा सुझाव है कि आप रिजल्टसेट, स्टेटमेंट और/या कनेक्शन ऑब्जेक्ट्स के लिए अपना कोड जांचें, और सुनिश्चित करें कि आप उन्हें finally
ब्लॉक में बंद कर दें।
मेमोरी डंप को देखते हुए, मुझे उम्मीद है कि आप चिंतित हैं कि 898,527,228 बाइट जा रहे हैं। विशाल बहुमत को अंतिमकर्ता ऑब्जेक्ट द्वारा बनाए रखा जाता है जिसका आईडी 2aab07855e38
है। यदि आपके पास अभी भी डंप फ़ाइल है, तो पर एक नज़र डालें किFinalizer
का जिक्र है। यह Proxool वस्तुओं की तुलना में अधिक समस्याग्रस्त दिखता है।
धन्यवाद लेकिन मुझे जेडीबीसी कनेक्शन पोल मेमो लीक – fuyou001
का कारण नहीं मिल रहा है ठीक है, मैं तब तक नहीं कर सकता जब तक कि मैं आपका स्रोत कोड नहीं देखता। (और मैं वैसे भी अपने समय के माध्यम से घूमने के लिए तैयार नहीं हूँ ...) –
- 1. स्मृति रिसाव
- 2. UIWebView रिसाव स्मृति करता है?
- 3. क्या यह स्मृति रिसाव माना जाता है?
- 4. सी # मेमोरी रिसाव?
- 5. पांडः यहां स्मृति रिसाव कहां है?
- 6. JNA स्मृति रिसाव
- 7. क्या एक एप्लिकेशन मेमोरी रिसाव एक ऑपरेटिंग सिस्टम मेमोरी रिसाव का कारण बनता है?
- 8. क्या Async.StartChild में मेमोरी रिसाव है?
- 9. स्मृति रिसाव GETIPFROMHOST
- 10. स्मृति getaddrinfo रिसाव
- 11. स्मृति रिसाव KeychainItemWrapper
- 12. बचें स्मृति रिसाव
- 13. जावास्क्रिप्ट स्मृति रिसाव
- 14. इस फ़ाइल को इतनी मेमोरी क्यों ले रही है?
- 15. क्या यह एक स्मृति रिसाव है?
- 16. rabbitmq + अजवाइन मेमोरी रिसाव?
- 17. आईओएस - मेमोरी रिसाव AddressBook
- 18. मेमोरी रिसाव जोखिम
- 19. Entitymanager मेमोरी रिसाव का कारण बनता है?
- 20. रिकर्सिव अनुक्रम रिसाव स्मृति करें?
- 21. GetOracleDecimal स्मृति रिसाव
- 22. प्रतिरूपण स्मृति रिसाव
- 23. JDK1.7 classloader स्मृति रिसाव
- 24. CGContextDrawPDFPage स्मृति रिसाव
- 25. एमवीसी 4 आईआईएस मेमोरी रिसाव
- 26. पर्ल मानचित्र/grep स्मृति रिसाव
- 27. क्या jQuery.data एक स्मृति रिसाव का कारण बन सकता है?
- 28. एक जेएफआरएएम मेमोरी रिसाव का कारण बनता है?
- 29. क्या यह कोड मेमोरी रिसाव का कारण बनता है?
- 30. हेरोोकू पर मेमोरी रिसाव कैसे मिल सकता है?
"छवियां" लिंक आपके ट्विटर प्रोफाइल के रूप में दिखाई देता है। –
@ आर। मार्टिनिन्हो फर्नांडीस यह एक छवि के माध्यम से जाता है जिसे उसने ट्विटर के साथ होस्ट किया है, मुझे लगता है। – Oliver