2012-07-20 19 views
18

मुझे जावा ढेर स्मृति के साथ एक समस्या है। मैंने जावा में एक क्लाइंट सर्वर एप्लिकेशन विकसित किया जो विंडोज सेवा के रूप में चलाया जाता है, जिसके लिए 512 एमबी से अधिक मेमोरी की आवश्यकता होती है। मैं 2GB RAM के लिए है, लेकिन यह एक अपवादजावा हेप मेमोरी को स्थायी रूप से कैसे बढ़ाया जाए?

Out of memory error:java heap space

फेंकता है जब मैं अपने एप्लिकेशन को चलाने, लेकिन मैं पहले से ही जावा नियंत्रण कक्ष में ढेर आकार (अधिकतम 512MB) की स्थापना की है और मैं अभी भी एक ही त्रुटि मिलती है। मैं कमांड लाइन के माध्यम से ढेर आकार सेट नहीं कर सकता क्योंकि मेरा एप्लिकेशन विंडोज सेवा के रूप में चलता है तो मैं डिफ़ॉल्ट ढेर आकार कैसे बढ़ा सकता हूं?

+1

नियंत्रण कक्ष में सेटिंग केवल एप्लेट और जावा वेब प्रारंभ अनुप्रयोगों को प्रभावित इसलिए इसका आपके आवेदन पर कोई असर नहीं पड़ेगा। – assylias

+0

आप जावा सेवा के रूप में जावा कैसे चला रहे हैं? आम तौर पर जो भी उपयोगिता आप इसे करने के लिए उपयोग कर रहे हैं, वह आपको कमांड लाइन तर्क निर्दिष्ट करने की अनुमति देती है। –

उत्तर

-3

कृपया ध्यान दें कि एक java.lang.OutOfMemoryError: Java heap space निम्नलिखित जावा ढेर आकार में वृद्धि काफी अक्सर बस एक अल्पकालिक समाधान है।

इसका मतलब यह है कि यदि आप 512 एमबी से डिफ़ॉल्ट जावा हीप आकार बढ़ाते हैं तो 2048 एमबी कहें, तो आप किसी भी समय यह त्रुटि प्राप्त कर सकते हैं यदि आप मेमोरी रिसाव से निपट रहे हैं। पूछने का मुख्य सवाल यह है कि आप इस ओओएम त्रुटि को पहली जगह क्यों प्राप्त कर रहे हैं? क्या यह वास्तव में एक एक्सएमएक्स मूल्य बहुत कम है या सिर्फ एक और समस्या का लक्षण है?

जावा अनुप्रयोग विकसित करते समय, इसकी स्थिर और गतिशील स्मृति पदचिह्न आवश्यकता को समझना हमेशा महत्वपूर्ण होता है, इससे बाद में जटिल ओओएम समस्याओं को रोकने में मदद मिलेगी। JVM Xms & का उचित आकार उचित अनुप्रयोग प्रोफाइलिंग और लोड परीक्षण के माध्यम से Xmx सेटिंग्स प्राप्त की जा सकती है।

+29

जबकि आप जो कह रहे हैं वह गलत नहीं है, यह स्वीकार्य उत्तर नहीं होना चाहिए क्योंकि यह ओपी के प्रश्न का उत्तर नहीं देता है। – searchengine27

+1

हां, यह "उत्तर" पूरी तरह से इस संभावना को अनदेखा करता है कि उपयोगकर्ता नियमित रूप से नौकरियों को चलाने की इच्छा रखता है जिसमें स्मृति में बड़ी मात्रा में डेटा की आवश्यकता होती है ... स्मृति रिसाव के साथ कुछ भी नहीं करना चाहिए। –

2

यदि आपको आरक्षित मेमोरी बढ़ाने की आवश्यकता है, तो वीएम पैरामीटर -Xms और -Xmx, उपयोग उदा। -Xms512m -Xmx512m। वहाँ भी पैरामीटर -XX है: MaxPermSize = 256M जो स्मृति स्थायी पीढ़ी के लिए आरक्षित बदलता है

आपके आवेदन नियंत्रण पैनल में, खिड़कियों सेवा के रूप में चलाता है -> प्रशासन उपकरण -> सेवाओं में आप अपनी सेवा करने के लिए कुछ रन पैरामीटर जोड़ सकते हैं

+0

क्या मैं इस "JAVA_OPT = -Xms512m -Xmx512m" –

+0

जैसे पर्यावरण चर सेट कर सकता हूं, इस बारे में निश्चित नहीं है, कभी कोशिश नहीं की। यदि आप इसे आज़माएं, तो कृपया परिणाम यहां पोस्ट करें;) मैंने अपनी पोस्ट अपडेट की है, आप विंडोज सर्विस –

+2

पर कुछ पैरामीटर जोड़ सकते हैं JAVA_OPTS पर्यावरण चर आमतौर पर आपके द्वारा चल रहे स्क्रिप्ट के लिए विशिष्ट है (जैसे टॉमकैट स्टार्टअप स्क्रिप्ट)। आप सेटिंग नहीं मान सकते हैं इसका कोई असर होगा। जैसा कि नीचे उल्लिखित _JAVA_OPTIONS का उपयोग करें। यह विंडोज़ और लिनक्स पर काम करता है, बशर्ते आप ओआरएएल प्रदान करते हुए जेवीएम प्रदान कर रहे हों। कोई गारंटी नहीं है कि यह जेआरॉकिट या आईबीएम जेवीएम पर काम करेगा। – Matt

31

जावा वर्चुअल मशीन में दो कमांड लाइन तर्क होते हैं जो प्रारंभिक और अधिकतम ढेर आकार सेट करते हैं: -Xms और -Xmx। आप _JAVA_OPTIONS नामक सिस्टम वातावरण चर जोड़ सकते हैं, और वहां ढेर आकार मान सेट कर सकते हैं।
उदाहरण के लिए यदि आप एक 512Mb प्रारंभिक और 1024MB अधिकतम ढेर आकार आप इस्तेमाल कर सकते हैं चाहते हैं:

Windows के तहत

:

SET _JAVA_OPTIONS = -Xms512m -Xmx1024m 

लिनक्स के तहत:

export _JAVA_OPTIONS="-Xms512m -Xmx1024m" 

यह डिफ़ॉल्ट रूप से पढ़ने के लिए संभव है रनटाइम क्लास की कुल मेमरी() विधि का उपयोग कर प्रोग्रामिंग के रूप में जेवीएम ढेर आकार। JVM ढेर आकार को पढ़ने के लिए निम्न कोड का उपयोग करें।

public class GetHeapSize { 
    public static void main(String[]args){ 

     //Get the jvm heap size. 
     long heapSize = Runtime.getRuntime().totalMemory(); 

     //Print the jvm heap size. 
     System.out.println("Heap Size = " + heapSize); 
    } 
} 
+2

लिनक्स निर्यात _JAVA_OPTIONS = "..." काम करता है। सत्यापित करने के लिए: 'जावा-वर्जन' पहली पंक्ति विकल्पों की रिपोर्ट करनी चाहिए, उदाहरण के लिए: '_JAVA_OPTIONS को चुना गया: -Xms512m -Xmx2048m'। – rickfoosusa

+0

मुझे यकीन नहीं है कि यह क्यों है, लेकिन जावा वीएम को कई हीप विकल्प (प्रारंभिक और अधिकतम) के साथ मेरे लिए कभी लॉन्च नहीं किया जा सकता था। '_JAVA_OPTIONS' –

+0

धन्यवाद में केवल 1 विकल्प के साथ :) एक छोटी व्याख्या ने बहुत मदद की! –

1

यह मेरे लिए काम किया:

निर्यात _JAVA_OPTIONS = "- Xmx1g"

यह महत्वपूर्ण है कि आप कोई रिक्त स्थान है, क्योंकि मेरे लिए यह काम नहीं किया है। मैं सिर्फ कॉपी और चिपकाने का सुझाव दूंगा।तब मैं भाग गया:

जावा -XshowSettings: वीएम

और यह आपको बता देंगे:

अप चुना गया _JAVA_OPTIONS: -Xmx1g

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