दिलचस्प पोस्ट
अन्य सिस्टम डेटा की लोचदारशोध प्रतिकृति? क्यूबिक क्वर्वे जावा एफएक्स अजगर में अल्फा न्यूमेरिक सेट को सॉर्ट करने के लिए कैसे करें स्लाइडिंग या अस्पष्टता प्रभाव के साथ सरल jQuery छवि स्लाइडर का निर्माण कैसे करें? nginx – client_max_body_size का कोई प्रभाव नहीं है Regex पैटर्न एसक्यूएल फ़ैशन फ़ंक्शन के अंदर? HTML पृष्ठ में सभी पाठ नोड्स ढूंढें वर्ग और उदाहरण विधियों के बीच अंतर क्या है? स्ट्रिंग कॉन्सटेंट पूल नोड। जेएस में वादे को समझना 64 बिट विंडो पर पायथन 32-बिट स्मृति सीमाएं मैं जावा में HTTP शीर्ष लेख से आईपी पते कैसे प्राप्त कर सकता हूं onTaskRemoved () HUAWEI और XIOMI उपकरणों में नहीं बुलाया जा रहा है कोणीय जेएस: निर्देशक की लिंक फ़ंक्शन की आवश्यकता क्या है जब हमारे पास पहले से ही निर्देश के नियंत्रक का दायरा था? क्रोम डेवलपर टूल में == $ 0 (डबल बराबर डॉलर शून्य) क्या होता है?

जावा में "कोड बहुत बड़ा" संकलन त्रुटि

क्या जावा में कोड के लिए कोई अधिकतम आकार है? मैंने 10,000 से अधिक लाइनों के साथ एक फ़ंक्शन लिखी दरअसल, प्रत्येक पंक्ति एक सरणी चर के लिए एक मान प्रदान करती है।

arts_bag[10792]="newyorkartworld"; arts_bag[10793]="leningradschool"; arts_bag[10794]="mailart"; arts_bag[10795]="artspan"; arts_bag[10796]="watercolor"; arts_bag[10797]="sculptures"; arts_bag[10798]="stonesculpture"; 

और संकलन करते समय मुझे यह त्रुटि मिलती है: कोड बहुत बड़ी है

इसका समाधान कैसे किया जा सकता है?

वेब के समाधान से एकत्रित समाधान "जावा में "कोड बहुत बड़ा" संकलन त्रुटि"

एक जावा क्लास में एक भी विधि बाइटकोड की अधिकतम 64KB हो सकती है।

लेकिन आपको इसे साफ करना चाहिए!

इस डेटा को संग्रहीत करने के लिए .properties फ़ाइल का उपयोग करें, और इसे java.util.Properties द्वारा लोड करें

आप अपने क्लासपाथ पर। .properties फाइल डालकर ऐसा कर सकते हैं, और इसका उपयोग कर सकते हैं:

 Properties properties = new Properties(); InputStream inputStream = getClass().getResourceAsStream("yourfile.properties"); properties.load(inputStream); 

एक विधि पर एक 64K बाइट-कोड आकार सीमा है

कहा कि, मुझे W / रिचर्ड से सहमत होना है; आपको एक विधि की आवश्यकता क्यों है? ओपी में उदाहरण को देखते हुए, गुणों की फाइल पर्याप्त होनी चाहिए … या यदि आवश्यक हो तो डेटाबेस भी।

यह पागलपन की तरह थोड़ा सा लगता है क्या आप पाठ फ़ाइल या किसी अन्य डेटा स्रोत से मान पढ़ कर सरणी को प्रारंभ नहीं कर सकते हैं?

जावा आभासी मशीन विनिर्देश के अनुसार, एक विधि का कोड 65536 बाइट्स से बड़ा नहीं होना चाहिए :

code_length आइटम का मान 65536 से कम होना चाहिए।

जहां code_length को code_length में परिभाषित किया गया है Code विशेषता :

code_length : code_length आइटम का मान इस विधि के लिए कोड सरणी में बाइट्स की संख्या देता है Code_length का मान शून्य से अधिक होना चाहिए; कोड सरणी रिक्त नहीं होनी चाहिए।

code[] : कोड सरणी जावा आभासी मशीन कोड के वास्तविक बाइट देता है जो विधि को लागू करती है।

अपने कोड को रिएक्टर करने का प्रयास करें जावा में विधि के आकार की सीमा है

वाह, यह बुरा है आपके कार्यक्रम में हार्ड कोडिंग डेटा पहले स्थान पर एक अच्छा विचार नहीं है। एक टन की हार्ड डेटा कोड किसी भी बेहतर नहीं है और आपको अन्य उत्तरों में वर्णित सीमाओं में चलाने के लिए कारण देता है।

इसको ठीक करने के कई तरीके हैं लेकिन निम्नलिखित को किसी अन्य कोड को नहीं तोड़ना चाहिए।

 public static String[] getTheArrayThing(){ List<String> list = new LinkedList<String>(); try { BufferedReader br = new BufferedReader(new FileReader(<the file>)); String line = br.readLine(); while (line != null) { list.add(line); line = br.readLine(); } } catch (Exception e){ throw new IllegalStateException("Couldn't load array file"); } return list.toArray(new String[0]); } 

मूल रूप से विधि बनाता है (और देता है लेकिन यह एक क्लास चर को आसानी से संपादित कर सकता है) एक सरणी जिसमें फ़ाइल की प्रत्येक पंक्ति होती है

बस अपने स्रोत उदाहरण (उदाहरण के लिए "newyorkartworld") को पाठ फ़ाइल में मानों को डंप – क्रम में – और इसका उपयोग सरणी लोड करने के लिए करें।

हालांकि प्रतिस्थापन में यह सरल ड्रॉप काम करेगी, अगर आप थोड़े से रिफाकोटर करने का समय पा सकते हैं, तो वहां बहुत अधिक सुरुचिपूर्ण समाधान है।

जैसा कि दूसरे उत्तर में बताया गया है, एक विधि के लिए 64 किलोमीटर की बाइटकोड सीमा है (कम से कम सूर्य के जावा कंपाइलर में)

मुझे भी यह उस पद्धति को और अधिक विधियों में तोड़ने के लिए और अधिक समझदारी बनायेगा – प्रत्येक ने कुछ संबंधित सामान को सरणी में निर्दिष्ट किया है (ऐसा करने के लिए एरेएलआईलिस्ट का उपयोग करने के लिए और अधिक समझ सकता है)

उदाहरण के लिए:

 public void addArrayItems() { addSculptureItems(list); ... } public void addSculptureItems(ArrayList list) { list.add("sculptures"); list.add("stonesculpture"); } 

वैकल्पिक रूप से आप एक स्थैतिक संसाधन से आइटम लोड कर सकते हैं अगर वे गुण फ़ाइल से ठीक तरह से तय की गई हैं

आप अतिरिक्त डेटा स्थान के लिए अपने कोड के लिए जगह बनाने के लिए एक और विधि जोड़ सकते हैं, आपके पास एक ऐसा तरीका हो सकता है जो बड़ी मात्रा में डेटा स्थान ले रहा हो। अपने तरीके को विभाजित करने की कोशिश करें क्योंकि मेरे पास एक ही समस्या थी और मेरे जावा एंड्रॉइड कोड में एक ही डेटा के लिए एक अतिरिक्त विधि बनाने के द्वारा इसे ठीक किया गया, यह करने के बाद यह समस्या चली गई थी

मैं इस समस्या में खुद को चलाया है मेरे लिए काम करने वाला समाधान रीफ़ैक्टर और विधि को अधिक प्रबंधनीय टुकड़ों के लिए छोटा करना था। आप की तरह, मैं करीब 10K रेखा विधि से काम कर रहा हूं। हालांकि, स्थैतिक चर के उपयोग के साथ-साथ छोटे मॉड्यूलर फ़ंक्शंस के साथ, समस्या का समाधान किया गया था।

लगता है कि एक बेहतर समाधान होगा, लेकिन जावा 8 का उपयोग करते हुए, कोई भी नहीं है …

यह त्रुटि कभी-कभी एक ही फ़ंक्शन में बहुत बड़े कोड के कारण होती है … उस त्रुटि को हल करने के लिए, एकाधिक कार्यों में फ़ंक्शन विभाजित करें, जैसे कि

 //Too large code function private void mySingleFunction(){ . . 2000 lines of code } //To solve the problem private void mySingleFunction_1(){ . . 500 lines of code } private void mySingleFunction_2(){ . . 500 lines of code } private void mySingleFunction_3(){ . . 500 lines of code } private void mySingleFunction_4(){ . . 500 lines of code } private void MySingleFunction(){ mySingleFunction_1(); mySingleFunction_2(); mySingleFunction_3(); mySingleFunction_4(); }