भले ही Java ऐप्लेट आजकल एक लोकप्रिय वेब तकनीक नहीं हैं, लेकिन Java वर्चुअल मशीन को सीधे Linux सर्वर पर तैनात करने के अनगिनत कारण हैं। यदि आप Linux java कमांड को सीधे डिस्क्रीट हार्डवेयर पर या इसके अपने VM के अंदर चलाने का प्रयास करते हैं, तो आपको "VM के आरंभीकरण के दौरान त्रुटि: ऑब्जेक्ट हीप के लिए पर्याप्त स्थान आरक्षित नहीं कर सका" संदेश मिल सकता है।
यह काफी अजीब लग सकता है क्योंकि आपके पास कमांड चलाने के लिए पर्याप्त RAM होने की संभावना है, लेकिन यह काफी हद तक भौतिक और वर्चुअल मेमोरी पेजों के उपयोग के तरीके में एक विशिष्ट विचित्रता के कारण होता है। कुछ अपेक्षाकृत बड़े आकार निर्दिष्ट करने से आपको इस संदेश को पूरी तरह से बायपास करने और java कमांड को किसी अन्य की तरह चलाने की अनुमति मिलनी चाहिए।
विधि 1: कमांड लाइन विकल्पों का उपयोग करना
यदि आपने java चलाने का प्रयास किया है और यह संदेश प्राप्त किया है, तो आपने शायद यह सुनिश्चित करने के लिए free कमांड पहले ही चला लिया होगा कि प्रोग्राम चलाने के लिए पर्याप्त मेमोरी है।

ध्यान दें कि हमारी टेस्ट मशीन पर हमारे पास लगभग 2.3 GB भौतिक RAM थी और वर्चुअल मेमोरी का एक भी पेज उपयोग नहीं हुआ था। यदि आप देखते हैं कि आपके पास मेमोरी की कमी है, तो आप इसे फिर से आजमाने से पहले चल रही अन्य चीजों को बंद करना चाहेंगे। दूसरी ओर, जिन्हें पर्याप्त फ्री मेमोरी मिली, वे सीधे एक आकार निर्दिष्ट करने का प्रयास कर सकते हैं।
उदाहरण के लिए, हमारी मशीन पर हम java -Xms256m -Xmx512M कमांड के रूप में चलाने में सक्षम थे और यह वैसे ही काम किया जैसे अन्यथा अपेक्षित था। यह उस हीप आकार को बाधित करता है जिसे Java वर्चुअल मशीन स्टार्टअप पर आरक्षित करने का प्रयास करती है। चूंकि एक अनियंत्रित वर्चुअल मशीन काल्पनिक रूप से असामान्य चीजें कर सकती है, यह अन्यथा फ्री सिस्टम पर त्रुटि संदेश फेंक सकती है। आप सही संयोजन खोजने से पहले उन दो मानों के साथ प्रयोग करना चाह सकते हैं।
यह इस बात की परवाह किए बिना एक समस्या हो सकती है कि आप इसे किस पर चला रहे हैं क्योंकि JVM का आपके GNU/Linux को चलाने के लिए उपयोग किए जा सकने वाले VM के प्रकार से कोई लेना-देना नहीं है।
विधि 2: परिवर्तन को स्थायी बनाने के लिए वेरिएबल्स निर्यात करना
जब आपको कोई मान मिल जाए जो काम करता है, तो आप इसे उस सत्र के लिए स्थायी बनाने के लिए निर्यात कर सकते हैं। उदाहरण के लिए, हमने bash कमांड प्रॉम्प्ट से export _JAVA_OPTIONS='-Xms256M -Xmx512M' का उपयोग किया और इसने हमें java कमांड को बिना किसी अन्य विकल्प के तब तक चलाने की अनुमति दी जब तक हम अपने सर्वर से लॉग आउट नहीं हुए।
जब हम किसी अन्य सत्र में लॉग इन हुए तो इसे फिर से चलाने की आवश्यकता थी, इसलिए यदि आप अक्सर java कमांड का उपयोग करने की योजना बना रहे हैं तो आप इसे किसी भी प्रासंगिक स्टार्टअप स्क्रिप्ट में जोड़ना चाह सकते हैं। हमने इस लाइन को अपनी .bash_login फ़ाइल में जोड़ा और यह हर बार काम करता प्रतीत हुआ जब हम बिना इसे फिर से चलाए लॉगिन प्रॉम्प्ट का उपयोग करते थे, हालांकि यदि आप किसी अलग शेल के साथ काम कर रहे हैं तो आपको इसके लिए कोई अन्य स्थान ढूंढना पड़ सकता है।
आपने देखा होगा कि केवल कुछ हार्डवेयर कॉन्फ़िगरेशन ही इस त्रुटि संदेश को ट्रिगर करते हैं। ऐसा इसलिए है क्योंकि यह आमतौर पर बड़ी मात्रा में भौतिक RAM वाली मशीनों पर होता है लेकिन इसका उपयोग करने के लिए कम ulimits होते हैं। Java एक विशाल ब्लॉक आवंटित करने का प्रयास करेगा केवल यह बताया जाने के लिए कि यह नहीं कर सकता, जिसे यह मेमोरी खत्म होने के रूप में व्याख्या करता है।
विधि 3: वर्तमान Java विकल्प प्रिंट करना
यदि आप कमांड लाइन पर काम कर रहे हैं और वर्तमान में आपके द्वारा सेट किए गए _JAVA_OPTIONS मान का त्वरित संदर्भ चाहते हैं, तो बस echo $_JAVA_OPTIONS चलाएं और यह तुरंत वर्तमान मान प्रिंट कर देगा। यह समस्या निवारण के लिए उपयोगी है जब आप कोशिश करने के लिए सही अंक निर्धारित करने का प्रयास कर रहे हों।
ध्यान रखें कि जबकि इस फिक्स को किसी अन्य छेड़छाड़ की आवश्यकता नहीं होनी चाहिए, Java "ऑब्जेक्ट हीप के लिए पर्याप्त स्थान आरक्षित नहीं कर सका" संदेश फेंक देगा यदि आप कभी वास्तव में वर्चुअल मेमोरी के मामले में कम पड़ते हैं। यदि ऐसा है, तो आप वर्तमान में चल रही प्रक्रियाओं को दोबारा जांचना चाहेंगे और यदि संभव हो तो सर्वर को पुनरारंभ करें। आप अधिक स्वैप स्पेस भी बना सकते हैं, लेकिन यदि यह एक समस्या है तो आमतौर पर इसे किसी अन्य तरीके से ठीक करने का प्रयास करना बेहतर है।
दुर्लभ मामले में यदि आपकी सेटिंग्स सही लगती हैं लेकिन फिर भी यह काम नहीं कर रहा है, तो सुनिश्चित करें कि आपने 64-बिट Java पैकेज इंस्टॉल किया है क्योंकि यह इस समस्या से प्रतिरक्षित होना चाहिए। सन्निहित मेमोरी आवश्यकताएं केवल Java के 32-बिट संस्करण पर लागू होती हैं। हमने कुछ मामलों में पाया कि 64-बिट संस्करण ने 32-बिट वर्चुअल मशीन बनाने का प्रयास किया, इसलिए कमांड लाइन पर -d64 विकल्प निर्दिष्ट करने से हमारे लिए यह ठीक हो गया।