मैं इस सवाल है कि ऐसे ही पूछ लिया गया पढ़ रहा था:, Avoid memory leaks in callbacks?अज्ञात श्रोताओं कमजोर संदर्भों के साथ असंगत हैं?
और मैं काफी उलझन में था जब तक किसी को जवाब निम्नलिखित:
"इस दृष्टिकोण के साथ समस्या यह है कि आप एक श्रोता जो केवल संदर्भित है नहीं हो सकता है संग्रह के रूप में यह (अगले जीसी पर) बेतरतीब ढंग से गायब हो जाएगा "
हूँ मैं मेरी समझ में सही करते समय जब एक WeakHashMap में संग्रहीत की तरह, एक कमजोर संदर्भों का उपयोग कि, अनाम श्रोताओं के साथ असंगत है?
मैं आम तौर पर इस तरह श्रोताओं पारित:
public static void main(String[] args) {
final Observable obs = new SomeObservable();
obs.addObserver(new Observer() {
public void update(final Observable o, final Object arg) {
System.out.println("Notified");
}
});
obs.notifyObservers();
... // program continues its life here
}
private static final class SomeObservable extends Observable {
@Override
public void addObserver(final Observer o) {
super.addObserver(o);
setChanged(); // shouldn't be done from here (unrelated to the question)
}
}
और मैं एक CopyOnWriteArrayList (डिफ़ॉल्ट नमूदार जाहिरा तौर पर इसके बाद के संस्करण के लिए एक पुराने वेक्टर लेकिन इसकी सिर्फ एक उदाहरण का उपयोग करता है का उपयोग करते हुए श्रोताओं का ट्रैक रखने दिखाएं कि मैं आम तौर पर श्रोता के रूप में उपयोग करने के लिए एक अज्ञात वर्ग कैसे बना सकता हूं)।
बोनस प्रश्न के रूप में: अज्ञात श्रोता के संदर्भ में जीसी के लिए पात्र कब होना चाहिए अवलोकन विषय एक कमजैश मैप का उपयोग करना चाहिए? जब मुख्य विधि निकलती है? जैसे ही obs.addObserver कॉल खत्म हो गया है?
मैं थोड़ा उलझन में हूं कि अज्ञात वर्ग के उदाहरणों के संदर्भ में/कैसे/कब जीसी के लिए संग्रहीत/संग्रहीत किया जाता है।
जाहिर है अगर मैं सामान्य संदर्भ रख रहा हूं तो यह जीसी के लिए योग्य नहीं है, लेकिन जब यह वीक हैशैप में होता है, तो ठीक कब श्रोता जीसी के लिए समझदार हो जाता है?
आपकी मदद के लिए धन्यवाद, मैं समझता हूं।लेकिन मेरा प्रश्न वास्तव में अज्ञात श्रोताओं से संबंधित है: यदि मैं वीकशैश मैप में एक अज्ञात श्रोता का संदर्भ डालता हूं, तो क्या उस अज्ञात श्रोता के लिए कहीं और रखा गया है? यदि नहीं, तो जीसी के लिए कौन सा पल समझदार हो गया है? किस कॉल के बाद? –