हर कोई सन्निहित स्मृति के बारे में उत्तर देता प्रतीत होता है, लेकिन अधिक दबाव वाले मुद्दे को स्वीकार करने की उपेक्षा करता है।
यहां तक कि 100% सन्निहित स्मृति आवंटन के साथ, आपके पास 32-बिट विंडोज ओएस (* डिफ़ॉल्ट रूप से) पर 2 गीब ढेर आकार नहीं हो सकता है। ऐसा इसलिए है क्योंकि 32-बिट विंडोज प्रक्रियाएं अंतरिक्ष के 2 GiB से अधिक को संबोधित नहीं कर सकती हैं।
जावा प्रक्रिया में परमिट जीन (पूर्व जावा 8), स्टैक आकार प्रति थ्रेड, जेवीएम / लाइब्रेरी ओवरहेड (जो प्रत्येक बिल्ड के साथ बहुत अधिक बढ़ता है) सभी ढेर के अतिरिक्त होंगे ।
इसके अलावा, JVM झंडे और उनके डिफ़ॉल्ट मान संस्करणों के बीच बदलते हैं। बस निम्नलिखित चलाएं और आपको कुछ विचार मिलेगा:
java -XX:+PrintFlagsFinal
ढेर सारे विकल्प ढेर के अंदर और बाहर मेमोरी डिवीजन को प्रभावित करते हैं। आपको कम से कम 2 गीब के साथ खेलने के लिए छोड़कर ...
मेरे इस उत्तर के अंशों का पुन: उपयोग करने के लिए (टॉमकैट के बारे में, लेकिन किसी भी जावा प्रक्रिया पर लागू होता है):
विंडोज़ ओएस कुल मिलाकर (डिफ़ॉल्ट रूप से) 2 गीब तक 32-बिट प्रक्रिया की मेमोरी आवंटन को सीमित करता है।
[आप केवल सक्षम होंगे] लगभग 1.5 GiB हीप स्थान आवंटित करने के लिए क्योंकि प्रक्रिया के लिए आवंटित अन्य मेमोरी (JVM / लाइब्रेरी ओवरहेड, परमिट जीन स्पेस आदि) भी है।
32-बिट विंडोज 2 जीबी प्रोसेस एड्रेस स्पेस लिमिट क्यों लगाता है, लेकिन 64-बिट विंडोज 4 जीबी लिमिट लगाता है?
अन्य आधुनिक ऑपरेटिंग सिस्टम [कफ लिनक्स] 32-बिट प्रक्रियाओं को 4 GiB पता योग्य स्थान के सभी (या अधिकांश) का उपयोग करने की अनुमति देते हैं।
कहा कि, 64-बिट विंडोज ओएस को 32-बिट प्रक्रियाओं की सीमा को 4 GiB (32-बिट पर 3 GiB) बढ़ाने के लिए कॉन्फ़िगर किया जा सकता है:
http://msdn.microsoft.com/en-us/library/windows/desktop/aa366778(v=vs.85).aspx