2011-08-16 12 views
5

आप किसी भी विचार है कारण है कि मैं एक 'धागा "मुख्य" java.lang.OutOfMemoryError में अपवाद: जावा ढेर अंतरिक्ष' मिल सकता है कर त्रुटि जब मेरे Android एप्लिकेशन के निर्माण, भले ही मैं जोड़ा -vmargs -Xmx1024M ग्रहण तर्क के लिए -Xms512M? मैं जानना चाहता हूं कि मैंने कौन सी त्रुटि बनाई है जो बिल्ड समय पर ऐसी त्रुटि को ट्रिगर करेगी, क्योंकि यह मुझे दिखाई देगा कि ग्रहण या मेवेन में केवल एक बग बिल्ड समय पर ऐसी त्रुटि उत्पन्न कर सकता है। मैं अपना आवेदन बनाने के लिए मैवेन इंस्टॉल के रूप में रन का उपयोग कर रहा हूं (मेवेन एंड्रॉइड ग्रहण प्लगइन के साथ)। के रूप में चलाएं-> 'मेवेन पैकेज' लगभग 1min30 इंतजार करने के बाद भी उसी निर्माण विफलता का उत्पादन करता है। मेरे पास 3 जीबी मेमोरी वाला डेस्कटॉप कंप्यूटर है, और मेरा एप्लिकेशन लगभग इतना बड़ा नहीं है।जावा ढेर अंतरिक्ष

धन्यवाद।

+0

क्या आप अपने ऐप में किसी भी बिटमैप फ़ंक्शंस का उपयोग कर रहे हैं? –

+0

हाँ वह है और मैं – Moussa

उत्तर

8

अपने जेवीएम तर्कों में -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/some/path जोड़ें ताकि जब यह स्मृति से बाहर हो जाए तो यह ढेर को बाहर कर देगा। आप ढेर को ब्राउज़ करने और समस्या का पता लगाने के लिए Eclipse Memory Analyser या jhat का उपयोग कर सकते हैं।

अद्यतन: अपने मैवेन एंड्रॉइड प्लगइन की स्मृति को बढ़ाने का प्रयास करें। अपने pom.xml में, प्लगइन विन्यास को Xmx के लिए एक JVM तर्क जोड़ें:

<plugin> 
    <artifactId>maven-android-plugin</artifactId> 
    <configuration> 
    <jvmArguments> 
     <argument>-Xmx1500m</argument> 
    </jvmArguments> 
    </configuration> 
</plugin> 
+0

हूं मुझे खेद है कि मैं ढेर को डंप करने का प्रबंधन नहीं कर सकता। क्या इन तर्कों को ग्रहण में 'रन कॉन्फ़िगरेशन' के 'वीएम तर्क' टेक्स्ट बॉक्स के समान स्थान पर डाला जाना चाहिए, जैसे: -Xms1024M -Xmx1024M -XX: + HeapDumpOnOutOfMemoryError -XX: HeapDumpPath = "C:"? – John156

+0

@ जॉन 156 प्लगइन – dogbane

+0

की बढ़ती स्मृति पर मेरा अपडेट देखें ओह मेरे भगवान बहुत बहुत धन्यवाद! मैं इसे दिनों के लिए ठीक करने की कोशिश कर रहा हूं। क्या यह एक छोटा सा स्पष्टीकरण हो सकता है कि यह क्यों काम करता है, यह क्यों है कि वे अलग-अलग jvms का उपयोग करते हैं और क्यों कॉलिंग प्रक्रिया (ग्रहण, jre, ...) के तर्क स्वचालित रूप से बाल प्रक्रिया में सेट नहीं होते हैं? – John156

2

आपका ग्रहण JVM तर्क में कोई फर्क नहीं है। आपको कंपाइलर के ढेर को बढ़ाना होगा।

मैं http://javahowto.blogspot.com/2006/06/fix-javac-java-lang-outofmemoryerror.html

If [...] you're running Eclipse, go into your "run As" dialog for your Build.xml and add -Xms256m -Xmx256m to the "VM Arguments" text box

+0

यह इतना चालाक था कि थोड़ी देर के लिए वास्तव में सोचा कि यह मेरी समस्या का समाधान करेगा। मुझे नहीं पता था कि ग्रहण के जेवीएम संकलक की तुलना में अलग थे। तो बस हम स्पष्ट हैं, मैंने रन तीर पर क्लिक करने के लिए क्या किया था, फिर कॉन्फ़िगरेशन चलाएं, फिर मेरी रन कॉन्फ़िगरेशन का चयन करें, फिर जेआरई टैब पर जाएं, और 'वीएम तर्क' रिक्त टेक्स्टबॉक्स में, '-Xms1024M - Xmx1024M ', फिर लागू करें और चलाएं। दुर्भाग्य से यह काम नहीं किया, मुद्दा अभी भी वही है। – John156

+0

हाँ, क्योंकि, अब मुझे एहसास है कि आप एंड्रॉइड प्लगइन मेवेन और इसके ग्रहण एकीकरण का उपयोग कर रहे हैं। इसका मतलब है कि ग्रहण कंपाइलर सेटिंग्स कोई फर्क नहीं पड़ता, लेकिन प्लगइन की है। –

0

के हवाले कर रहा हूँ तो बढ़ रही है तो जवाब नहीं है मैं आपको लगता है कि प्रत्येक वर्ग आप ने लिखा के लिए लाइन गिनती की जांच करने का सुझाव देते हैं। यदि कई ऑब्जेक्ट्स हैं तो यह एक कंपाइलर समस्या हो सकती है, इसलिए विधियों को विभाजित करने की कोशिश करें और/या उन्हें एक या अधिक कक्षाओं में 3000+ लाइनों में कॉपी करें।

1

मुझे इस रूपांतरण का अनुभव Dalvik प्रारूप में विफल रहा: डीएक्स निष्पादित करने में असमर्थ: जावा हीप स्पेस। eclipse.ini फ़ाइल में सभी मानों को बढ़ाने में मदद नहीं मिली। मेरे एडीटी प्लगइन को 12 से 16 तक अपग्रेड करने के बाद यह हुआ। मैंने एंड्रॉइड एसडीके को बदल दिया जो अपग्रेड से पहले मेरी मौजूदा परियोजनाओं की ओर इशारा करते थे (एंड्रॉइड एसडीक्स से जो मेरे पिछले विज्ञापन पर जुड़े थे, मैंने उन्हें एंड्रॉइड एसडीक्स में बदल दिया जो मेरे नए एडीटी से जुड़े थे) और इसने मेरे लिए इस मुद्दे को हल किया। उम्मीद है की यह मदद करेगा। और अगर यह किसी की मदद करता है तो कृपया प्लस 1 के लिए वोट दें।

संबंधित मुद्दे