पृष्ठभूमिस्विंग श्रोता स्मृति रिसाव को कैसे हल करें?
तो मैंने पढ़ा है कि स्विंग अनुप्रयोगों के भीतर अक्सर मेमोरी लीक विभिन्न श्रोताओं (माउस, कुंजी, ध्यान, आदि) के उपयोग से उत्पन्न होते हैं। अनिवार्य रूप से, क्योंकि आप किसी ऑब्जेक्ट को श्रोता के रूप में पंजीकृत करते हैं और ऑब्जेक्ट को अपंजीकृत करना भूल जाते हैं, नोटिफ़ायर ऑब्जेक्ट के संदर्भ पर होल्डिंग समाप्त होता है, और कुछ स्मृति को रिसाव करता है।
मैं हमारे आवेदन श्रोताओं deregistering नहीं कर रहा था पता था और संभावित समाधानों पर अनुसंधान के एक बिट किया:
मैं इस समस्या से निपटने के लिए एक दृष्टिकोण पाया स्विंग के साथ दृष्टिकोण पर एक WeakReference का उपयोग करते हैं, पूरी जानकारी थी श्रोताओं को here मिल सकता है।
मैं तो कैसे NetBeans प्रपत्र संपादक कोड जनरेट किया गया था साफ करने के लिए के बारे में उत्सुक के बाद श्रोताओं रूप में जोड़ा और पाया कि NetBeans
argTypeComboBox.addItemListener(new java.awt.event.ItemListener() {
public void itemStateChanged(java.awt.event.ItemEvent evt) {
argTypeComboBoxItemStateChanged(evt);
}
});
यानी एक रैपिंग वस्तु के माध्यम से श्रोताओं को पंजीकृत किया गया था लेकिन उत्पन्न कोड किया बन गया removeItemListener
पर कॉल करके कभी भी साफ नहीं लगते हैं।
प्रश्न
रैपिंग वस्तु एक कमजोर संदर्भ की तरह कार्य कर रहा है? मेरे लिए ऐसा लगता है कि यह स्मृति की एक छोटी राशि (रैपिंग ऑब्जेक्ट का आकार) रिसाव कर सकता है?
क्या श्रोताओं से निपटने के दौरान आपके पास वैकल्पिक दृष्टिकोण हैं कि यह सुनिश्चित करने के लिए कि जब आप उनके साथ समाप्त हो जाते हैं तो वे हमेशा कचरा इकट्ठा होते हैं?
ग्रेट स्पष्टीकरण यिशई, फैंसी एप्लिकेशन में श्रोताओं से निपटने के लिए आपने क्या दृष्टिकोण लिया था जिसमें बड़ी समय मेमोरी लीक थी? – Clinton
@ क्लिंटन, एक बार जब मैंने समस्या का निदान किया (इसमें थोड़ी देर लग गई, बहुत सारी प्रोफाइलिंग) मैं बस खिड़की के निपटान पर श्रोता को अपमानित करने के लिए निश्चित था। मुझे सभी विवरण याद नहीं हैं, लेकिन यह कुंजी थी - मुझे समस्या के मानक समाधान के रूप में कमजोर संदर्भों के बारे में पता नहीं था, मैं शायद इसका उपयोग कर पाऊंगा। – Yishai
@Yishai मैं बदनाम कर रहा था क्योंकि श्रोता गुंजाइश छोड़ रहा था ... लेकिन यह थोड़ा उलझन लग रहा था और एक बेहतर समाधान की तलाश में चला गया। सुधार के लिए फिर से धन्यवाद। – Clinton