2011-05-27 16 views
13

मैं 64-बिट जेवीएम (ओरेकल) का उपयोग कर रहा हूं, जब मैं 256 एमबी से बड़े बफर आकार आवंटित करने का प्रयास करता हूं तो यह शिकायत करता है और "सेगमेंटेशन गलती" त्रुटि फेंकता है। मैं और जावा एनआईओ का उपयोग कर प्रत्यक्ष मेमोरी बफर आवंटित करता हूं, और इन वस्तुओं को एक ही मशीन (लिनक्स 64 बिट) पर आरएमआई क्लाइंट प्रोग्राम से और स्थानांतरित करता है।जावा सेगमेंटेशन गलती

कोई विचार?

+9

क्या आप कुछ कोड पोस्ट कर सकते हैं? –

+1

आपकी अधिकतम ढेर सेटिंग क्या है? – jtahlborn

+5

एक सेगमेंटेशन गलती केवल तभी हो सकती है यदि आपके पास जेएनआई लाइब्रेरी में या JVM में कोई बग है। पहली बात यह है कि मैं यह सुनिश्चित करता हूं कि आपके पास जावा 6 अपडेट 25 या नवीनतम संस्करण है। –

उत्तर

0

क्या आपने बग रिपोर्ट से निम्नलिखित कार्यवाही की कोशिश की है?

भागो System.gc() ByteBuffer.allocateDirect() से पहले ...

+0

पूरी तरह से अप्रासंगिक। डायरेक्ट बफर कचरा-संग्रहणीय जगह से बाहर नहीं आते हैं। – EJP

+0

@EJP: यदि आप बग रिपोर्ट पढ़ते हैं, तो यह एक उचित औचित्य देता है कि इससे मामले की मदद क्यों हो सकती है। –

+0

आप कभी भी सुनिश्चित नहीं हो सकते हैं कि System.gc() कुछ भी करता है ... इसलिए किसी भी समस्या को हल करने का कोई अच्छा तरीका नहीं है ... मैं ईजेपी से सहमत हूं और मैं अपना बयान बढ़ा दूंगा कि यह कॉल बहुमत में है मामले पूरी तरह से अप्रासंगिक। यह सिर्फ जेवीएम के लिए एक संकेत है कि कार्यक्रम जीसी बनाना चाहता है लेकिन आप कभी भी यह नहीं कह सकते कि क्या JVM होगा। – Chris

2

विभाजन दोष स्मृति त्रुटियों के कारण (जैसे JVM के रूप में) के कार्यक्रमों में होता है। या तो JVM में एक बग है जो इसे कंप्यूटर पर स्मृति के गलत खंड का उपयोग करने की कोशिश करता है जब यह उस बफर स्पेस का उपयोग करने के लिए क्रैंक होता है, या यह 256 एम मेमोरी आवंटित करने का प्रयास करता है और प्रक्रिया में यह अधिक जगह का उपयोग करता है कंप्यूटर ने इसे दिया। संक्षेप में, यह मुझे लगता है कि 64 बिट JVM को अपनी वर्तमान सेटिंग्स के साथ उस स्थान को आवंटित करने के लिए नहीं बनाया गया था। शायद आप JVM को कॉन्फ़िगर करने का प्रयास कर सकते हैं ताकि यह कंप्यूटर से शुरू होने से पहले अधिक स्मृति मांग सके। jtahlborn की टिप्पणी पूछने पर कि जेवीएम पर अधिकतम ढेर सेटिंग क्या है, यह भी एक प्रश्न है जिसे आप प्रोग्राम को फिर से चलाने से पहले पूछना चाहिए।

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