इस प्रश्न को उत्पन्न करने के लिए एक सामान्य तरीके के लंबे समय के लिए सोचने के बाद (और एक खोजने में असफल) मैं इसे एक ठोस उदाहरण के रूप में पूछने जा रहा हूं:क्या होता है जब JVM रन टाइम के दौरान आवंटित करने के लिए स्मृति से बाहर चला जाता है?
मान लीजिए मेरे पास एक लिनक्स मशीन है जिसमें 1 जीबी है स्मृति की जो इसे प्रक्रियाओं को आवंटित कर सकती है (भौतिक और स्वैप योग 1 जीबी)।
मेरे पास मशीन पर मानक ओरेकल हॉटस्पॉट JVM संस्करण 7 स्थापित है। एक भी क्षण में, वहाँ पर्याप्त चल ऐसी है कि कि 1 जीबी की केवल 400 एमबी के लिए स्वतंत्र हैं कार्यक्रमों रहे हैं, और मैं निम्नलिखित JVM झंडे के साथ उस पल में एक जावा प्रोग्राम प्रारंभ करते हैं:
java -Xms256m -Xmx512m -jar myJar.jar
क्या happends? :
ए। क्या JVM तुरंत शुरू करने में विफल रहता है क्योंकि यह सभी 512 एमबी मेमोरी आवंटित करने की कोशिश करेगा और असफल होगा (इस तथ्य के कारण कि इस समय पर्याप्त उपलब्ध स्मृति नहीं है)?
अगर JVM शुरू होता है:
अगर कुछ बिंदु पर चल जावा प्रक्रिया स्मृति के 400 से अधिक एमबी की आवश्यकता होगी (और अभी भी केवल 400 है कि क्या मौजूदा जावा प्रक्रिया पहले से ही इस्तेमाल किया गया है की तुलना में मुक्त अन्य है स्मृति की एमबी है), क्या होगा:
बी जावा प्रक्रिया आउटऑफमेमरोइरर के साथ विफल हो जाएगी?
सी। क्या यह किसी अन्य (मानक) त्रुटि के साथ विफल हो जाएगा?
डी। क्या यह अनिर्धारित व्यवहार है?
मुझे विश्वास है (बी), हालांकि अगर केवल 200 एमबी (एक्सएमएस से कम) उपलब्ध था तो विकल्प ए – Scorpion