मैं java.util.HashMap<java.awt.Point, Segment>
में लगभग 50,000 ऑब्जेक्ट्स (और इसलिए 50,000 कुंजी) डालने की कोशिश कर रहा हूं। हालांकि, मैं आउटऑफमेमरी अपवाद प्राप्त करता रहता हूं। (Segment
मेरी अपनी कक्षा है - बहुत हल्का वजन - एक String
फ़ील्ड, और 3 int
फ़ील्ड)।हैश मैप में 50,000 ऑब्जेक्ट्स डालने पर मुझे आउटऑफमेमरी त्रुटि क्यों मिलती है?
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space at java.util.HashMap.resize(HashMap.java:508) at java.util.HashMap.addEntry(HashMap.java:799) at java.util.HashMap.put(HashMap.java:431) at bus.tools.UpdateMap.putSegment(UpdateMap.java:168)
यह काफी हास्यास्पद लगता है के बाद से मैं देख रहा हूँ मशीन पर उपलब्ध स्मृति के बहुत सारे है कि वहाँ - दोनों में नि: शुल्क रैम और आभासी स्मृति के लिए HD अंतरिक्ष।
क्या यह संभव है कि जावा कुछ कठोर स्मृति आवश्यकताओं के साथ चल रहा है? क्या मैं इन्हें बढ़ा सकता हूं?
क्या HashMap
के साथ कुछ अजीब सीमा है? क्या मुझे अपना खुद का कार्यान्वयन करना होगा? क्या कोई अन्य वर्ग देखने लायक है?
(मैं 2GB RAM के साथ एक इंटेल मशीन पर जावा 5 चला रहा हूँ OS X 10.5 के तहत।)
मैं वर्तमान आकार को कैसे निर्धारित करूं ताकि मैं भविष्य के लिए जान सकूं? धन्यवाद! –
बहुत अजीब हालांकि आपके पास ऐसी छोटी याददाश्त उपलब्ध है कि आप हैश में 50000 छोटी वस्तुएं नहीं जोड़ सके। इतना ज्यादा नहीं लगता है। –
धन्यवाद! इसे 2048 एमबी तक पंप करना और मेरा कार्यक्रम आखिरकार निष्पादन खत्म कर देता है! Haha। वाह। –