पर विस्तार न करें एक सर्वर पर तेज़ छवि अपलोड करने के लिए बड़े बिटमैप का आकार बदलते समय मैं कभी-कभी आउटऑफमेमरी एरर में भाग गया। इसे रोकने के लिए मैं आवश्यक मात्रा में स्मृति की गणना करता हूं और यह जांचता हूं कि यह छवि को स्केल करने से पहले Runtime.getRuntime()। MaxMemory() से अधिक है या नहीं।जेनमोशन एमुलेटर
हालांकि, मैं अभी भी ओओएम त्रुटियों में भाग लेता हूं, भले ही छवि आसानी से ढेर पर फिट हो।
नकली डिवाइस (गैलेक्सी एसआईआई एपीआई 16) मुझे उपर्युक्त विधि का उपयोग करके 67108864 बाइट्स की अधिकतम मेमोरी देता है।
निम्न स्निपेट में, ढेर का आकार 43 9 75 के है और केवल < उस स्मृति का 15K उपयोग में है। मेरे ~ 31 के आवंटन के लिए ढेर स्वचालित रूप से लगभग 45K तक बढ़ना चाहिए जो अभी भी 64 एमआईबी के अधिकतम आकार के करीब नहीं है। लेकिन जैसा कि आप देख सकते हैं, ढेर का विस्तार करने के बजाय, दल्विक वीएम स्मृति से बाहर चला जाता है।
10-13 20:35:57.223: D/dalvikvm(1201): GC_FOR_ALLOC freed 505K, 67% free 14692K/43975K, paused 31ms, total 31ms
10-13 20:35:57.223: I/dalvikvm-heap(1201): Forcing collection of SoftReferences for 31961100-byte allocation
10-13 20:35:57.251: D/dalvikvm(1201): GC_BEFORE_OOM freed 2K, 67% free 14689K/43975K, paused 29ms, total 29ms
10-13 20:35:57.251: E/dalvikvm-heap(1201): Out of memory on a 31961100-byte allocation.
मुझे आश्चर्य है कि यह वास्तविक डिवाइस पर भी हो सकता है या यदि यह एक जीनमोशन बग हो सकता है।
क्या ढेर अधिकतम मैमरी() तक विस्तारित होने की गारंटी है? Runtime.getRuntime() के लिए JavaDoc। फ्रीमेमरी() कहता है कि यह "हो सकता है" विस्तार, जिसका अर्थ है।
long maxMemory = Runtime.getRuntime().maxMemory();
long usedMemory = Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory();
long availableMemory = maxMemory - usedMemory;
इस कॉल OutOfMemoryError का कारण बनता है:
मैं सिर्फ स्मृति मैं उपयोग कर सकते हैं की राशि की गणना करने के एक realiable तरह से की जरूरत है, यह कैसे मैंने किया, मुझे सही करें यदि मैं गलत हूँ है
// outOptions has an appropriate inSampleSize
BitmapFactory.decodeStream(inputStream, null, outOptions);
क्या आपने इस मुद्दे को हल किया? दुर्भाग्य से – KinGPinG
नहीं। कोई विचार? – wkarl
नहीं, मुझे खेद है कि मैं अभी भी इसके साथ काम कर रहा हूं। अगर मुझे कुछ मदद मिलती है तो मैं आपको बता दूंगा। – KinGPinG