के साथ कमजोर संदर्भ जावा में एक कमजोर संदर्भ बनाने के लिए संभव है जिसका ऑब्जेक्ट केवल कचरा कलेक्टर को भेजा जा सकता है यदि कोई निर्दिष्ट स्थिति true
लौटाती है?एक शर्त/टाइमआउट
कहते हैं कि मैं एक कैश जो कुछ आंकड़ों के आईडी नंबर के नक्शे की तरह कुछ करते हैं:
Map<Integer, SomeData> cache = new HashMap<>();
SomeData
दो महत्वपूर्ण तरीकों - void updateTime()
, जो सिर्फ वर्तमान समय के एक आंतरिक चर सेट, और boolean canBeDeleted()
, जो यह जांचता है कि ऑब्जेक्ट का पिछले 10 मिनट में उपयोग किया गया है या नहीं (बस वर्तमान समय और सहेजे गए समय की तुलना करके 10 मिनट)। यह समय की इस निश्चित राशि के लिए इस्तेमाल नहीं किया गया है, विधि रिटर्न true
और वस्तु कैश से हटाया जा सकता है ...
हालांकि, जब मैं मजबूत करने के बजाय कमजोर संदर्भों के साथ एक कैश बनाएँ:
Map<Integer, WeakReference<SomeData>> cache = new HashMap<>();
तो केवल एक चीज WeakReference
चेकों शायद वस्तु के लिए संभव मजबूत संदर्भ हैं, लेकिन अगर यह भी मेरी हालत canBeDeleted()
की जाँच की और संदर्भ को नहीं निकाला, अगर यह false
लौटे मैं करना चाहते हैं। क्या ऐसा करने का कोई तरीका है?
(इसके शीर्ष पर, एक स्मृति रिसाव है और मुझे यकीन नहीं है कि इसे कैसे हल किया जाए ... जब वीक रेफरेंस के अंदर ऑब्जेक्ट हटा दिया जाता है, तो मानचित्र में अभी भी अनावश्यक कुंजी/मान जोड़ी होती है)।
अग्रिम धन्यवाद।
आप पर [ 'अमरूद caches'] देखें, तो (http://code.google.com/p/guava-libraries/wiki/कैश एक्स्प्लेन्टेड), आप एक ऐसा बना सकते हैं जो स्वचालित रूप से उन प्रविष्टियों को हटा देता है जिन्हें किसी दिए गए समय में संदर्भित नहीं किया गया है। – Keppil
"()" में समस्या के लिए: आपको अभी भी अपना नक्शा साफ़ करना होगा। WeakRef के क्लाइंट को हटाने से मानचित्र प्रविष्टि को स्वतः हटाया नहीं जाएगा। – Fildor