मैं एक bespoke तार प्रोटोकॉल का उपयोग कर टीसीपी पर भेजे गए संदेशों को संसाधित करने के लिए कोडेक लिख रहा हूं। डीकोड प्रक्रिया के दौरान मैं String
एस, BigDecimal
एस और तिथियों की संख्या बना देता हूं। क्लाइंट-सर्वर का उपयोग पैटर्न मतलब है कि यह आम है ग्राहक एक अनुरोध जारी करने के लिए और फिर आदि प्रतिक्रिया संदेशों के हजारों है, जो की एक बड़ी संख्या में जो परिणाम नकलString
रों, BigDecimal
रों,पर्मजेन स्पेस या रोल-माय-इंटर्न इंटर्न विधि का प्रयोग करें?
डिकोड इसलिए मैं के लिए ने InternPool<T>
वर्ग बनाया है जो मुझे ऑब्जेक्ट के प्रत्येक वर्ग को प्रशिक्षित करने की इजाजत देता है। आंतरिक रूप से, पूल WeakHashMap<T, WeakReference<T>>
का उपयोग करता है।
InternPool<BigDecimal> pool = new InternPool<BigDecimal>();
...
// Read BigDecimal from in buffer and then intern.
BigDecimal quantity = pool.intern(readBigDecimal(in));
मेरा प्रश्न: उदाहरण के लिए: मैं BigDecimal
के लिए InternPool
उपयोग कर रहा हूँ लेकिन मैं यह भी बजाय String
String
के intern()
विधि के लिए उपयोग करने पर विचार करना चाहिए, जो मेरा मानना है कि PermGen स्थान का उपयोग करता? PermGen अंतरिक्ष का उपयोग करने का क्या फायदा है?
@kts: [] BigDecimal के लिए अगर मैं बाइट मैप करने के लिए थे समस्या तो यह है कि बाइट [] कुछ भी द्वारा संदर्भित नहीं किया जाएगा एक बार प्रशिक्षु पूल बनाया गया है/BigDecimal लौट आए। बाइट मानना [] अंतर्निहित WeakHashMap में कुंजी है इससे संबंधित बिगडिसीमल उपयोग में होने के बावजूद प्रवेश को हटा दिया जाएगा। – Adamski
क्या 'वीक रेफरेंस' इसके लिए उपयुक्त है, या आप 'सॉफ्ट रेफरेंस' का उपयोग कर रहे हैं? जीसी दोनों के लिए अलग-अलग व्यवहार करता है और ऐसा लगता है जैसे आप एक प्रकार का कैश बनाने की कोशिश कर रहे हैं; उस उद्देश्य के लिए कमजोर संदर्भ अच्छे उपयोग नहीं हैं। http://stackoverflow.com/questions/2861410/weakhashmap-iteration-and-garbage-collection/2862174#2862174 –
@Adamski मैं केवल BigDecimal पर एक SoftReference और करने के लिए एक ReferenceQueue का प्रयोग करेंगे: क्यों कुछ कारणों के लिए यहाँ मेरा उत्तर देखें बिगडिसीमल को एक बार दबाए जाने के बाद मानचित्र से 'बाइट [] 's हटा दें। (शायद एक BiMap की आवश्यकता है)।यह अनावश्यक BigDecimal वस्तुओं के निर्माण को खत्म कर सकता है स्मृति/जीसी रनटाइम और निष्पादन समय (केवल एक बार निर्माण करना है) की बचत। – KitsuneYMG