JVM प्रारंभिक ढेर स्मृति आवंटन [डुप्लिकेट]
मैंने निर्दिष्ट -Xms और -Xmx मानों को एक ही 4GB के रूप में निर्दिष्ट किया है। अब जब मैं अपने स्प्रिंग-बूट एप्लिकेशन को शुरू करता हूं, तो मैं अपनी धारणा के तहत था कि ओएस आवेदन शुरू करने के ठीक बाद 4GB मेमोरी आवंटित करेगा, क्योंकि -Xms तर्क का उपयोग करके निर्दिष्ट मूल्य है। लेकिन जब मैंने एप्लिकेशन के रेजिडेंट सेट की जाँच की और मेमोरी को भी ढेर कर दिया (JMX का उपयोग करके), मैं देख सकता हूँ कि आवंटित मेमोरी अभी भी 1GB से कम है। तो इसका मतलब यह है कि ओएस आवश्यक रूप से निर्दिष्ट मेमोरी का उपयोग -Xms का आवंटन नहीं करता है।
अग्रिम में धन्यवाद।
जवाब
आपने यह नहीं बताया कि कौन सा ओएस और कौन सा जेवीएम विक्रेता / संस्करण है लेकिन अक्सर ओएस आलसी पेजों को आवंटित करता है, यही है कि वे रैम ("निवासी") में नहीं हैं जब तक कि जरूरत न हो। यदि आपके आवेदन को वास्तव में उस ढेर स्मृति की आवश्यकता नहीं है, तो वह निवासी नहीं है। इसके अलावा "अनुकूली आकार की नीति" भी है जो "-Xms" के नीचे भी सिकुड़ सकती है यदि यह अधिभोग बहुत कम है:https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gc-ergonomics.html