যদিও জাভা অ্যাপলেট 요즘 ওয়েব টেকনোলজি হিসেবে জনপ্রিয় নয়, লিনাক্স সার্ভারে সরাসরি জাভা ভার্চুয়াল মেশিন ডিপ্লয় করার অসংখ্য কারণ আছে। আপনি যদি ডিসক্রিট হার্ডওয়্যারে অথবা নিজস্ব VM-এ লিনাক্স java কমান্ড সরাসরি চালানোর চেষ্টা করেন, তবে "VM ইনিশিয়ালাইজেশনের времяে এরর: অবজেক্ট হিপের জন্য পর্যাপ্ত স্পেস রিজার্ভ করতে পারলাম না" মেসেজ পেতে পারেন।
এটি কিছুটা অদ্ভুত লাগতে পারে কারণ আপনার কাছে কমান্ড চালানোর জন্য পর্যাপ্ত RAM থাকার সম্ভাবনা বেশি, কিন্তু এটি মূলত ফিজিক্যাল এবং ভার্চুয়াল মেমরি পেজ ব্যবহারের একটি নির্দিষ্ট আচরণের কারণে হয়। কিছু বড় সাইজ নির্দিষ্ট করলে আপনি এই মেসেজটি সম্পূর্ণরূপে বাইপাস করে java কমান্ড অন্য কমান্ডের মতো চালাতে পারবেন।
পদ্ধতি ১: কমান্ড লাইন অপশন ব্যবহার করা
আপনি যদি java চালানোর চেষ্টা করে এই মেসেজ পান, তবে আপনি সম্ভবত ইতিমধ্যে free কমান্ড চালিয়ে পর্যাপ্ত মেমরি আছে কিনা তা চেক করেছেন।

লক্ষ্য করুন আমাদের টেস্ট মেশিনে ২.৩ GB ফিজিক্যাল RAM ছিল এবং ভার্চুয়াল মেমরির এক পেজও ব্যবহার হয়নি। আপনি যদি মেমরির সংকট দেখেন, তবে আবার চেষ্টা করার আগে আপনি যা চলাচল করছেন সেগুলো বন্ধ করুন। অন্যদিকে, যাদের কাছে পর্যাপ্ত ফ্রি মেমরি আছে তারা সরাসরি সাইজ নির্দিষ্ট করে দেখতে পারেন।
উদাহরণস্বরূপ, আমাদের মেশিনে আমরা java -Xms256m -Xmx512M কমান্ডটি চালাতে পেরেছিলাম এবং এটি প্রত্যাশা অনুযায়ী কাজ করেছিল। এটি জাভা ভার্চুয়াল মেশিন যে হিপ সাইজ স্টার্টআপে রিজার্ভ করার চেষ্টা করে সেটি সীমাবদ্ধ করে। যেহেতু একটি অনিয়ন্ত্রিত ভার্চুয়াল মেশিন সিদ্ধান্তগতভাবে অস্বাভাবিক কিছু করতে পারে, এটি অন্যথায় ফ্রি সিস্টেমেও এরর মেসেজ ফেলতে পারে। আপনি সঠিক কোম্বিনেশন পাওয়া পর্যন্ত এই দুটি মান নিয়ে এক্সপেরিমেন্ট করতে পারেন।
এটি যে টাইপের মেশিনে আপনি चलाাচ্ছেন তার নির্বিশেষে হতে পারে কারণ JVM-এর আপনি যে টাইপের VM ব্যবহার করে GNU/Linux চালাচ্ছেন সেটির সাথে কিছু লেনাদেনা নেই।
পদ্ধতি ২: ভেরিয়েবল এক্সপোর্ট করে পরিবর্তন স্থায়ী করা
যখন আপনি একটি কাজের মান পেয়ে যান, তখন আপনি সেটি সেই সেশনের জন্য স্থায়ী করতে এক্সপোর্ট করতে পারেন। উদাহরণস্বরূপ, আমরা bash কমান্ড প্রম্পট থেকে export _JAVA_OPTIONS='-Xms256M -Xmx512M' ব্যবহার করেছিলাম এবং এটি আমাদের/java কমান্ডটি অন্য কোনো অপশন ছাড়াই চালাতে দিয়েছিল যতক্ষণ না আমরা সার্ভার থেকে লগ আউট করলাম।
আমরা যখন অন্য সেশনে লগ ইন করলাম তখন এটি আবার চালাতে হয়েছিল, তাই আপনি যদি(java কমান্ড জোরदारভাবে ব্যবহার করার পরিকল্পনা করেন তবে এটি যেকোনো প্রাসঙ্গিক স্টার্টআপ স্ক্রিপ্টে যোগ করতে চাইতে পারেন। আমরা আমাদের .bash_login ফাইলে লাইনটি যোগ করলাম এবং এটি লগইন প্রম্পট ব্যবহার করার প্রতিবার কাজ করত 듯, যদিও আপনি যদি ভিন্ন শেল ব্যবহার করেন তবে এর জন্য অন্য লোকেশন খুঁজে বের করতে হতে পারে।
আপনি লক্ষ্য করেছেন হতে পারে যে শুধু নির্দিষ্ট হার্ডওয়্যার কনফিগারেশন এই এরর মেসেজ ট্রিগার করে। এটো কারণ এটি সাধারণত অনেক ফিজিক্যাল RAM আছে কিন্তু এর ব্যবহারের জন্য কম ulimits वाली মেশিনে হয়। জাভা একটি বড় ব্লক অ্যালোকেট করার চেষ্টা করে কিন্তু বলা হয় এটি করতে পারবে না, যা এটি মেমরি শেষ হওয়ার হিসেবে ব্যাখ্যা করে।
পদ্ধতি ৩: বর্তমান জাভা অপশন প্রিন্ট করা
আপনি যদি কমান্ড লাইন에서 কাজ করছেন এবং আপনি কি _JAVA_OPTIONS মান সেট করেছেন তা দ্রুত রেফারেন্স চান, তবে সারমে echo $_JAVA_OPTIONS চালান এবং এটি বর্তমান মানগুলো অবিলম্বে প্রিন্ট করবে। এটি সমস্যা সমাধান করার সময় সঠিক সংখ্যা বের করার জন্য উপকারী।
মনে রাখবেন যে এই ফিক্সে আর কোনো ফেরাফেরি প্রয়োজন নয় সে সত্ত্বেও, আপনি যদি প্রকৃতপক্ষে ভার্চুয়াল মেমরির সংক্ষিপ্ত পक्षে পড়ে যান তবে জাভা "অবজেক্ট হিপের জন্য পর্যাপ্ত স্পেস রিজার্ভ করতে পারলাম না" মেসেজ ফেলবে। যদি এই কেসটি হয়, তবে আপনি বর্তমানে কী প্রসেস চলছে তা ডাবল চেক করুন এবং সম্ভব হলে সার্ভার রিস্টার্ট করুন। আপনি আরও সওয়াপ স্পেসও তৈরি করতে পারেন, কিন্তু যদি এটি একটি সমস্যা হয় তবে সাধারণত অন্য কোনো উপায়ে এটি ঠিক করার চেষ্টা করা ভালো।
বিরল কেসে আপনার সেটিংস সঠিক লাগে কিন্তু এটি কাজ না করলে, নিশ্চিত করুন যে আপনি 64-বিট জাভা প্যাকেজ ইনস্টল করেছেন কারণ এটি এই সমস্যারต่อ রোগপ্রতিরোধক্ষম হওয়া উচিত। সन्नিবিষ্ট মেমরি প্রয়োজনীয়তা শুধু 32-বিট ভার্সনের জাভা-তে প্রযোজ্য। আমরা কিছু কেসে পেয়েছিলাম 64-বিট ভার্সন 32-বিট ভার্চুয়াল মেশিন তৈরি করার চেষ্টা করছিল, তাই কমান্ড লাইনে -d64 অপশন নির্দিষ্ট করলে আমাদের সমস্যাটি সমাধান হয়েছিল।