2012-04-21 9 views
6

में आपके द्वारा लगाए गए कोड की लाइनों की संख्या पर एक सीमा है मेरे पास एक प्रोजेक्ट है जिस पर मैं काम कर रहा हूं और आज तक सभी ठीक से चल रहे थे। मेरे पास एक जावा क्लास दस्तावेज़ में कोड की करीब 6000 लाइनें हैं। यदि मैं कोड में एक और IF क्लॉज डालने का प्रयास करता हूं, तो कक्षा को कॉल करने पर प्रोग्राम अपवाद फेंकता है। सभी अतिरिक्त स्निपेट जिन्हें मैंने कक्षा में रखने की कोशिश की है, क्लास को विफल होने पर विफल होने का कारण बनता है। मैंने परीक्षण कोड जोड़ने की कोशिश की है जो मुझे पता है कि ठीक काम करता है, और वे सभी बल को बंद चेतावनी संवाद फेंक देते हैं। मेरा विश्वास करो कि अंतिम स्निपेट के साथ कुछ भी गलत नहीं है जिसे मैं कक्षा में रखने का प्रयास करता हूं। एक बार जब मैं अंतिम "अगर" स्निपेट निकालता हूं, तो कोई त्रुटि नहीं होती है। क्या किसी ने कभी यह देखा है? जब वर्ग कहा जाता है, तो अपरेटर में अपवाद फेंक दिया जाता है। मुझे बल बंद चेतावनी खिड़की मिलती है। यहां जावा फ़ाइल का आकार है: 172,503 बाइट अग्रिम धन्यवाद!क्या किसी ग्रहण जावा डौमेंट

+1

* "... जब कक्षा" वर्ग पर कॉल की जाती है तो प्रोग्राम अपवाद फेंकता है। क्या अपवाद है? अपवाद कहां फेंक दिया जाता है? ग्रहण से? चल रहे कार्यक्रम में? "बुलाया" से आपका क्या मतलब है? –

+2

आप 64kb (बाइटकोड के) विधि आकार सीमा में चल रहे हैं। http://stackoverflow.com/questions/107855/is-there-any-no-of-lines-code-limit-for-a-java-class और http://stackoverflow.com/questions/5689798/why- करता है-जावा-सीमा-आकार-का-एक-विधि-से-65535-बाइट और http://stackoverflow.com/questions/6570343/maximum-size-of-a-method-in-java –

+7

मुझे चाहिए इंगित करें कि कोड की 6,000 लाइन वाली कक्षा ** ** वास्तव में ** खराब डिज़ाइन का संकेतक है। यदि आप अपने कोड को कुछ और उचित तरीके से दोबारा संशोधित/मॉड्यूलर करते हैं, तो समस्या दूर होनी चाहिए। –

उत्तर

3

मैं कुछ समय पहले उस समस्या में भाग गया और पाया कि इसमें 50k लाइनें और कोड में अधिक समस्या नहीं है जब तक विधि सीमा पार नहीं हो जाती तब तक कक्षा।

एक ही विधि में जो वास्तव में बाइटकोड आकार का कारण बनता है, उसके आधार पर मुझे कोड/विधि के 2-3k लाइनों के बीच सीमाएं मिलीं।

कहा:

माध्यम से वास्तव में एक निश्चित बिंदु पर ग्रहण दुर्घटनाओं जब अपने कुल कोड संकलित करने के लिए बहुत बड़ा हो जाता है - बस 1 जीबी या तो करने के लिए ग्रहण की स्मृति में वृद्धि। अब तक मेरी परियोजनाओं के लिए कुल 100k लाइनों के लिए पर्याप्त था ...

+0

पेस्ट कर सकते हैं मैंने विधि को काट दिया और अन्य वर्गों को टुकड़ों को खोजने के लिए रीडायरेक्ट किया, यह एक आकर्षण की तरह काम करता है। विधि का आकार पार हो गया था। यह मुझे एक पूरा दिन खर्च किया। लेकिन किसी भी तरह के लाब के जीवन में एक दिन क्या है LOL – lastshadowrider

+0

@lastshadowrider बस उत्सुक, क्रैश होने के लिए आपकी विधि कितनी लाइनें हैं? – blessenm

+0

क्रैश होने से पहले लगभग 5, 9 80 लाइनें। मैंने सोचा कि मैं सिर्फ विधि में जोड़ना चाहता हूं, क्योंकि सब कुछ ठीक काम कर रहा था। और फिर उछाल। – lastshadowrider

1

मैंने पहले यह देखा है, ग्रहण स्वयं जावा से बाहर चला जाता है, इसलिए यदि आपके पास बहुत अधिक कोड है तो इसे बहुत रैम गहन है, ताकि उसे आवंटित किए जाने से अधिक की आवश्यकता हो।

+3

कितना अधिक है? पूरा एपीके केवल 512 केबी है। – lastshadowrider

4

आप एक ही निम्नलिखित सेटिंग्स का उपयोग कर संशोधित कर सकते हैं:

--launcher.XXMaxPermSize 
256m 
--launcher.defaultAction 
openFile 
-vmargs 
-Dosgi.requiredJavaVersion=1.5 
-Xms40m 
-Xmx512m 
+0

मैं इन बयानों को कहां रखूं? – lastshadowrider

+0

ओपन eclipse.ini फ़ाइल खोलें और सेटिंग्स – Satya

+0

मदद के लिए धन्यवाद सत्य – lastshadowrider

1

वहाँ कोड की पंक्तियों एक ग्रहण जावा doument में रख सकते हैं की संख्या पर कोई सीमा है।

ठीक नहीं है।

संकलित विधि में बाइटकोड की संख्या और इस तरह की अन्य चीजों पर सीमाएं हैं, लेकिन इन्हें जावा क्लासफ़ाइल प्रारूप (यानी जेवीएम विनिर्देश) द्वारा ग्रहण द्वारा नहीं लगाया जाता है।

यह भी संभव है कि ग्रहण को और अधिक स्मृति की आवश्यकता हो, हालांकि मुझे नहीं लगता कि एक if कथन जोड़ना विश्वसनीय रूप से इसे ट्रिगर करेगा। (और यदि ऐसा हुआ, तो अपवाद आपको बताएगा कि आप स्मृति से बाहर थे ...)

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