मैं ऐसे एप्लिकेशन पर काम कर रहा हूं जिसमें बहुत सारे डुप्लिकेट स्ट्रिंग हैं और मेरा काम स्मृति उपयोग को कम करने के लिए उन्हें खत्म करना है। मेरा पहला विचार यह सुनिश्चित करने के लिए String.intern
का उपयोग करना था कि स्ट्रिंग का केवल एक संदर्भ मौजूद होगा। यह ढेर मेमोरी को कम करने के लिए काम करता था, लेकिन यह परमजेन के रास्ते में बहुत अधिक वृद्धि हुई; वास्तव में, क्योंकि कई तार हैं जिन्हें केवल एक बार घोषित किया जाता है, वास्तव में आवेदन द्वारा उपयोग की जाने वाली स्मृति की कुल मात्रा में वृद्धि हुई है।स्मृति उपयोग को बढ़ाने के बिना हमेशा स्ट्रिंग के समान संदर्भ का उपयोग करने के लिए कोड को मैं कैसे अनुकूलित कर सकता हूं?
अन्य विचारों की खोज करने के बाद, मुझे यह दृष्टिकोण मिला: https://stackoverflow.com/a/725822/1384913।
यह स्ट्रिंग.intern जैसा ही हुआ: स्ट्रिंग उपयोग में कमी आई, लेकिन मैंने जो स्मृति सहेजी है, उसका उपयोग WeakHashMap
और WeakHashMap$Entry
कक्षाओं में किया जा रहा है।
क्या प्रत्येक स्ट्रिंग के लिए केवल एक संदर्भ बनाए रखने का एक प्रभावी तरीका है जो उसी स्मृति की मात्रा नहीं व्यतीत करता है जिसे मैं ठीक कर रहा हूं?
तो एक 'WeakHashMap' नहीं करता ' आपको पर्याप्त स्मृति बचाने के लिए, शायद ऐसा करने का कोई तरीका नहीं है। एक 'वीक हैश मैप' वास्तव में एकमात्र समाधान होने जा रहा है जिसके लिए आपको किसी विशेष मूल्य के लिए 'स्ट्रिंग' को देखने के लिए बहुत सारे रनटाइम नहीं लगते हैं। –
आप एक ऐसे प्रश्न को देख सकते हैं जो मैंने एक समान प्रश्न को दिया है http://stackoverflow.com/a/12793823/57695 –
एक स्पष्ट बिंदु, लेकिन यदि आप स्ट्रिंग्स के विभिन्न स्रोतों को वर्गीकृत कर सकते हैं (यानी बहुत से दोहराने वाले लोगों के बीच अंतर बनाम एक बार उपयोग किया जाता है) तो आप इसे और अधिक कुशलता से कर सकते हैं। यह आपके आवेदन के लिए संभव नहीं हो सकता है ... – DNA