2011-07-06 15 views
6

अमरूद के MapMaker.softValues() के लिए प्रलेखन के अनुसार:मुलायम संदर्भों का उपयोग करने के "व्यावहारिक परिणाम" क्या हैं?

चेतावनी: अधिकांश परिस्थितियों में यह बेहतर है नरम संदर्भों का उपयोग करने के बजाय एक प्रति-कैश अधिकतम आकार निर्धारित करने के लिए। यदि आप मुलायम संदर्भों के व्यावहारिक परिणामों से परिचित हैं तो आपको केवल इस विधि का उपयोग करना चाहिए।

मेरे पास मुलायम संदर्भों - उनके व्यवहार, उपयोग, और कचरा संग्रह के साथ उनके अनुबंध की मध्यवर्ती समझ है। हालांकि मैं सोच रहा हूं कि ये व्यावहारिक परिणाम क्या हैं जो दस्तावेज़ का पालन करता है। मुलायम संदर्भों के बजाय अधिकतम आकार का उपयोग करना बेहतर क्यों है? नरम संदर्भों के एल्गोरिदम और व्यवहार को उनके उपयोग को अधिक कुशल बनाने के लिए नहीं किया जाता है जो एक कैश को लागू करने के मामले में एक हार्डकोडेड छत है?

उत्तर

4

मुझे लगता है कि वे सभी भी संकेत दे रहे हैं कि यदि आप सॉफ्ट संदर्भ मानचित्र का उपयोग करते हैं, तो आपको अधिकतम स्मृति उपयोग के लिए तैयार रहना चाहिए, और संभावित रूप से अधिक जीसी गतिविधि के लिए तैयार होना चाहिए, क्योंकि संदर्भ केवल gc'd हैं क्योंकि स्मृति को मुक्त करने की आवश्यकता है अप।

यदि आपको पता है कि आपको केवल कैश में अंतिम एन मानों की आवश्यकता है तो एलआरयू कैश का उपयोग करना एक दुबला दृष्टिकोण है, जिसमें चल रहे एप्लिकेशन के लिए अधिक अनुमानित संसाधन उपयोग है।

इसके अलावा, this के अनुसार, ऐसा लगता है कि सर्वर और क्लाइंट JVM के बीच व्यवहार में सूक्ष्म मतभेद हैं।

सूर्य जेआरई वीक संदर्भों से अलग सॉफ़्ट रेफरेंस का इलाज करता है। सॉफ़्ट रेफरेंस द्वारा संदर्भित पर ऑब्जेक्ट करने का प्रयास करता है यदि उपलब्ध मेमोरी पर दबाव नहीं है। एक विस्तार: के लिए नीति "-client" और "-server" JRE के हैं अलग: -client JRE की कोशिश करता है SoftReferences ना कि स्टेक विस्तार से स्पष्ट करने के लिए पसंद करते हैं करके अपने पदचिह्न छोटे रखने के लिए, जबकि - सर्वर जेआरई को पसंद करते हुए उच्च प्रदर्शन (यदि संभव हो) को स्पष्ट सॉफ़्ट संदर्भों की तुलना में विस्तारित करने का प्रयास करता है। एक आकार सभी फिट नहीं है।

+0

धन्यवाद, मैं अब एलआरयू के फायदे अधिक स्पष्ट रूप से देख सकता हूं। इस मार्ग को लेना, क्या यह गारंटी देने का कोई तरीका है कि कोई दृढ़ पहुंच योग्य वस्तु निष्कासित नहीं की जाती है (MapMaker का उपयोग करके)? –

4

सॉफ़्ट रेफरेंस का उपयोग करने वाली व्यावहारिक समस्याओं में से एक यह है कि वे सभी को एक बार में त्याग दिया जाता है। आपके पास कैश होने का कारण बहुत अच्छा प्रदर्शन प्रदान करना है।

हालांकि कैश के लिए सॉफ्ट रेफरेंस का उपयोग करने का मतलब यह हो सकता है कि आपके आवेदन को जीसी के लिए बंद कर दिया गया है, यह कैश पुनर्निर्मित होने तक धीरे-धीरे चलाएगा। यानी बस उस समय आपको पकड़ने की ज़रूरत है।

नोट: आप LinkedHashMap as an LRU cache का उपयोग कर सकते हैं, इसे जटिल नहीं होना चाहिए।

+1

+1 मुझे एहसास नहीं हुआ कि वे आम तौर पर एक बार में सभी को त्याग दिया जाता था। सहायता –

+1

के लिए धन्यवाद एक वीक रेफरेंस को जीसी पर छोड़ दिया जा सकता है, जीसी विवेकाधिकार पर सॉफ़्ट रेफरेंस को त्याग दिया जाएगा। हालांकि, यह अत्यधिक संभावना है कि अगर किसी को जाना है, तो वे सभी को पुनः दावा किया जाएगा। यानी यह एक सुंदर degredation नहीं है। –

संबंधित मुद्दे