java हाशमैप के लिए बड़ी पाठ फ़ाइल पढ़ें-हेप अतिप्रवाह




hashmap text-files (2)

मैं एक टेक्स्ट फ़ाइल से डेटा को एक हैशमैप में प्राप्त करने की कोशिश कर रहा हूं। पाठ फ़ाइल में निम्न प्रारूप है:

इसमें 7 मिलियन लाइनें हैं ... (आकार: 700 एमबी)

तो मुझे क्या करना है: मैं प्रत्येक पंक्ति को पढ़ता हूं, फिर मैं खेतों को हरे रंग में लेता हूं और उन्हें एक स्ट्रिंग में जोड़ता हूं जो कि हैशमैप कुंजी होगा। मूल्य लाल रंग में फ़िल्ड होगा

हर बार मैं एक पंक्ति पढ़ता हूं जो मुझे हैशमैप में जांचना है अगर पहले से ऐसी कुंजी के साथ एक प्रविष्टि है, यदि हां, तो मैं मूल्य को लाल के साथ मूल्य के रूप में अद्यतन करता हूं; यदि नहीं, तो एक नई प्रविष्टि हैशमैप में जोड़ दी गई है।

मैंने 70,000 लाइनों के साथ पाठ-फाइलों के साथ यह कोशिश की, और यह काफी अच्छी तरह से काम करता है।

लेकिन अब 7 मिलियन लाइन टेक्स्ट-फाइल के साथ मुझे "जावा हीप स्पेस" मुद्दा मिलता है, जैसे छवि में:

क्या यह हैशमैप की वजह से है? क्या यह मेरे एल्गोरिदम को अनुकूलित करना संभव है?


साथ ही ढेर के आकार को बदलते हुए, उन्हें 'बाँध' के रूप में संग्रहित करके कुंजीपटल 'एन्कोडिंग' पर विचार करें, स्ट्रिंग नहीं।

प्रत्येक आईपी पते को 4 बाइट्स के रूप में संग्रहित किया जा सकता है। पोर्ट संख्याएं (यदि वे हैं तो) 2 बाइट्स प्रत्येक हैं। प्रोटोकॉल संभवतः एक बाइट या कम के रूप में संग्रहीत किया जा सकता है।

यह यूटीएफ 16 स्ट्रिंग के रूप में संग्रहीत 70 के बजाय, 13 बाइट्स की है, 5 के एक पहलू से चाबी के लिए मेमोरी को कम करता है, यदि मेरे गणित रात के इस समय सही हैं ...


आपको अपने ढेर के स्थान को बढ़ा देना चाहिए

-Xms<size>        set initial Java heap size
-Xmx<size>        set maximum Java heap size

java -Xms1024m -Xmx2048m

जावा कोड से जावा ढेर तक अच्छा पढ़ा

Table 3. Attributes of a HashMap
Default capacity                     16 entries
Empty size                           128 bytes
Overhead                             64 bytes plus 36 bytes per entry
Overhead for a 10K collection   ~    360K
Search/insert/delete performance    O(1)  Time taken is constant time, regardless of the number of elements (assuming no hash collisions)

अगर आप ऊपर तालिका 7 Million रिकॉर्ड के लिए ऊपर 246 MB लिए आते हैं तो अपने न्यूनतम ढेर आकार के आसपास 1000 MB होना चाहिए





heap-memory