मैं जावा के साथ कुशलता से बड़ी सीएसवी प्रारूपित फ़ाइलों (आमतौर पर 200-600 एमबी) लोड करने की कोशिश कर रहा हूं (कम स्मृति और जितनी जल्दी संभव हो सके)। वर्तमान में, कार्यक्रम स्ट्रिंग Arrays की एक सूची का उपयोग कर रहा है। इस ऑपरेशन को पहले प्रत्येक सीएसवी पंक्ति के लिए एक टेबल का उपयोग करके एक लूआ प्रोग्राम के साथ संभाला गया था और प्रत्येक "पंक्ति" तालिका को रखने के लिए एक तालिका थी।जावा - स्ट्रिंग सरणी की बड़ी मात्रा को कुशलतापूर्वक कैसे स्टोर करें
नीचे स्मृति मतभेद और लोड समय का एक उदाहरण है:
- CSV फ़ाइल - 232mb
- लुआ - स्मृति में 1,378mb - - स्मृति में 549mb - 157 सेकंड
- जावा लोड करने के लिए 12 लोड करने के लिए सेकंड
यदि मुझे सही याद है, तो लुआ तालिका में डुप्लिकेट आइटम वास्तविक मान के संदर्भ के रूप में मौजूद हैं। मुझे जावा उदाहरण में संदेह है, सूची प्रत्येक डुप्लिकेट मान की अलग प्रतियां रख रही है और यह बड़ी मेमोरी उपयोग से संबंधित हो सकती है।
नीचे CSV फ़ाइलों के भीतर डेटा पर कुछ पृष्ठभूमि है:
- प्रत्येक क्षेत्र एक स्ट्रिंग के होते हैं
- प्रत्येक पंक्ति के भीतर विशिष्ट क्षेत्रों स्ट्रिंग्स (उदाहरण के लिए क्षेत्र का एक सेट में से एक में शामिल हो सकते 3 हो सकता है "लाल", "हरा", या "नीला")।
- सामग्री के भीतर डुप्लिकेट स्ट्रिंग्स हैं।
नीचे क्या लोड डेटा की आवश्यकता हो सकती है के कुछ उदाहरण हैं:
- एक दिया स्ट्रिंग के साथ मेल खाते हैं और एक जीयूआई में मिलान स्ट्रिंग्स
- प्रदर्शन मैचों वापस जाने के लिए प्रयास करने से सभी स्ट्रिंग्स के माध्यम से खोजें टेबल (फ़ील्ड के माध्यम से सक्षम सॉर्ट करें)।
- स्ट्रिंग्स को बदलें या बदलें।
मेरा प्रश्न - क्या कोई संग्रह है जिसके लिए डेटा को पकड़ने के लिए कम स्मृति की आवश्यकता होगी फिर भी डेटा को आसानी से और जल्दी से खोज/सॉर्ट करने के लिए अभी भी सुविधाएं प्रदान करें?
अगर आपको लगता है कि कॉलम 3 पता केवल कुछ संभावित मान रखती है, आप कर सकते थे [प्रशिक्षु उन्हें] (http://docs.oracle मेमोरी उपयोग को कम करने के लिए .com/javase/7/docs/api/java/lang/String.html # intern% 28% 29)। यह भी देखें: http://stackoverflow.com/a/1855195/829571 – assylias
धन्यवाद assylias मैं इसका उपयोग करके कुछ परीक्षण चलाऊंगा। क्या आप जानते हैं कि यह छोटे स्ट्रिंग्स के लिए कुशल है - उदा। "टू" या "गो"। अधिकांश क्षेत्रों में तार होते हैं जो 45 वर्ण + होते हैं, हालांकि, कुछ काफी कम (4 या उससे कम) होते हैं। – user1816198
http://stackoverflow.com/questions/12792942/alternatives-to-java-string-interning –