जावा में ढेर का आकार बढ़ाएँ


276

मैं 8 जीबी रैम के साथ विंडोज 2003 सर्वर (64-बिट) पर काम कर रहा हूं। मैं ढेर मेमोरी को अधिकतम कैसे बढ़ा सकता हूं? मैं -Xmx1500mध्वज का उपयोग कर ढेर आकार को 1500 एमबी तक बढ़ा रहा हूं । क्या मैं ढेर मेमोरी को 75% भौतिक मेमोरी (6 जीबी हीप) में बढ़ा सकता हूं?


2
क्या आपने कोशिश की है -Xmx6g? क्या यह काम नहीं किया? आपने क्या अवलोकन किया?
oxbow_lakes

2
मुझे लगता है कि आप ढेर बढ़ाने की कोशिश की, लेकिन असफल रहे? क्या आप 64 बिट JVM का उपयोग कर रहे हैं?
बार्ट कीर्स

टिप्पणी के लिए धन्यवाद, लेकिन यह काम नहीं कर रहा है
सुनील

अच्छा - तुम्हें कैसे पता कि यह काम नहीं कर रहा है? क्या जेवीएम शुरू नहीं होता है?
oxbow_lakes

जवाबों:


327

32 बिट सिस्टम पर आप 4GB तक बढ़ा सकते हैं। यदि आप 64 बिट सिस्टम पर हैं तो आप उच्चतर जा सकते हैं। यदि आपने गलत तरीके से चुना है, तो चिंता करने की कोई आवश्यकता नहीं है, यदि आप 32 बिट सिस्टम पर 5 जी के लिए पूछते हैं तो जावा एक अमान्य मूल्य के बारे में शिकायत करेगा और छोड़ देगा।

जैसा कि दूसरों ने पोस्ट किया है, cmd- लाइन के झंडे का उपयोग करें - जैसे

java -Xmx6g myprogram

आप java -X लिखकर पूरी सूची (या लगभग पूरी सूची, वैसे भी) प्राप्त कर सकते हैं।


16
यह मेरा अनुभव रहा है कि वास्तविक हीप आकार जावा 32b वीएम (32 बी या 64 बी सिस्टम पर) का उपयोग करके स्वीकार करेगा - वीएम महत्वपूर्ण हिस्सा है, यहां), 2 जी के आसपास है। इसके अलावा, आश्चर्यचकित करने वाला
पूछने वाले

2
आह, आप बिल्कुल सही हैं - एक 32 बिट सिस्टम पर आप केवल 2 जीबी की मेमोरी को संबोधित कर सकते हैं।
स्टीव बी।

क्या अधिकतम हीप और न्यूनतम हीप आकार के लिए समान होना आवश्यक है?
user1747935

1
नहीं, लेकिन लोग आमतौर पर ऐसा करते हैं क्योंकि जेवीएम कभी भी आकार बदलने में समय बर्बाद नहीं कर सकता है। संदेह है कि यह बहुत मायने रखता है, टीबीएच।
स्टीव बी

1
@PhilipRego आप इसे जो चाहें सेट कर सकते हैं, सीमा तक जेवीएम संबोधित कर सकता है। -Xmx2G आपकी मेमोरी को 2G पर सेट करता है (-Xms को भी देखें)। यह सब कुछ के बारे में कुछ भी नहीं कहता है कि आपकी आवश्यकता कितनी स्मृति है।
स्टीव बी।

155

जेवीएम द्वारा कमांड लाइन विकल्पों का उपयोग करके आवंटित आकार को बढ़ाना संभव है यहां हमारे पास 3 विकल्प हैं

-Xms<size>        set initial Java heap size
-Xmx<size>        set maximum Java heap size
-Xss<size>        set java thread stack size

java -Xms16m -Xmx64m ClassName

उपर्युक्त पंक्ति में हम न्यूनतम ढेर 16mb और अधिकतम ढेर 64mb निर्धारित कर सकते हैं


28

32-बिट JVM पर, सबसे बड़ा हीप आकार जो आप सैद्धांतिक रूप से सेट कर सकते हैं 4gb है। बड़े आकार के आकार का उपयोग करने के लिए, आपको 64-बिट JVM का उपयोग करने की आवश्यकता है। निम्नलिखित आज़माएँ:

java -Xmx6144M -d64

-D64 ध्वज महत्वपूर्ण है क्योंकि यह JVM को 64-बिट मोड में चलाने के लिए कहता है।


धन्यवाद बॉस, लेकिन यह मेरे सिस्टम में काम नहीं कर रहा है कोई और चीज मुझे याद आ रही है
सुनील

4
"काम नहीं" को परिभाषित करें। क्या यह शुरू नहीं होता है और आपको एक त्रुटि देता है? क्या यह शुरू होता है लेकिन एक अलग हीप आकार का उपयोग करता है?
केविन

11

ग्रहण में सीधे जेवीएम द्वारा आवंटित आकार में वृद्धि करना संभव है। ग्रहण आईडीई गोटो में

रन ----> कॉन्फ़िगरेशन चलाएँ ----> तर्क

Enter -Xmx1g (इसका उपयोग अधिकतम आकार सेट करने के लिए किया जाता है जैसे Xmx256m या Xmx1g ...... m -> mb g ---> gb)


3
बस इसे जोड़ने के लिए एक वीएम तर्क होना चाहिए (ग्रहण आपको दो विकल्प देता है)।
मैट बॉयल

11

java -d64 -Xms512m -Xmx4g HelloWorld

जहाँ, -d64: 64-बिट JVM -Xms512m को सक्षम करेगा: 512 MB -Xmx4g के रूप में प्रारंभिक हीप आकार सेट करेगा: 4 जीबी के रूप में अधिकतम हीप आकार सेट करेगा (यहाँ जावा फ़ाइल का नाम है: HelloWorld.java)


9

आप JVM पैरामीटर प्रदान करने के द्वारा ढेर आकार में वृद्धि कर सकते -Xms और -Xmx नीचे की तरह:

जार फ़ाइलों के लिए:

java -jar -Xms4096M -Xmx6144M jarFilePath.jar

जावा फ़ाइलों के लिए:

 java -Xms4096M -Xmx6144M ClassName

उपरोक्त पैरामीटर्स में इनिशियलहाइपसाइज़ (-Xms) को बढ़ाकर 4GB (4096 MB) और मैक्सहाइपसाइज़ (-Xmx ) में बढ़ा दिया गया है। को बढ़ाकर 6GB (6144 MB) कर दिया गया है।

लेकिन, यंग जनरेशन हीप साइज वही रहेगा और अतिरिक्त हीपसाइज को ओल्ड जेनरेशन हीप साइज में जोड़ा जाएगा । यंग जनरल हीप और ओल्ड जनरल हीप के आकार को बराबर करना , -XX: NewRatio = 1 -XX: -UseAdaptiveSizePolicy पैराम का उपयोग करें ।

java -jar -Xms4096M -Xmx6144M -XX:NewRatio=1 -XX:-UseAdaptiveSizePolicy pathToJarFile.jar

-XX: नया अनुपात = पुराना जनरल हीप आकार: युवा जनरल हीपसाइज (आप अपना वांछित अनुपात प्राप्त करने के लिए इस अनुपात के साथ खेल सकते हैं)।


7

क्या मैं ढेर मेमोरी को 75% भौतिक मेमोरी (6 जीबी हीप) में बढ़ा सकता हूं।

हाँ तुम कर सकते हो। वास्तव में, आप चाहें तो भौतिक मेमोरी की मात्रा से अधिक तक बढ़ा सकते हैं।

क्या यह करना एक अच्छा विचार है यह इस बात पर निर्भर करता है कि आपके सिस्टम पर कितना चल रहा है। विशेष रूप से, यदि वर्तमान में चल रहे अनुप्रयोगों और सेवाओं का "वर्किंग सेट" काफी उपलब्ध भौतिक मेमोरी से अधिक है, तो आपका सिस्टम "थ्रैश" के लिए उत्तरदायी है, जो वर्चुअल मेमोरी पेज को डिस्क से और डिस्क पर ले जाने में बहुत समय व्यतीत करता है। शुद्ध प्रभाव यह है कि सिस्टम बुरी तरह से धीमा हो जाता है।


आपकी टिप्पणी के लिए धन्यवाद, लेकिन मैं कैसे बढ़ा सकता हूं। कृपया आप कमांड दे सकते हैं।
सुनील

कोशिश -Xmx6000m यदि आप जावा के 64 बिट संस्करण का उपयोग कर रहे हैं तो यह काम करना चाहिए।
स्टीफन सी

3
क्या आप सुनिश्चित हैं कि आप जावा का 64 बिट संस्करण चला रहे हैं? 64 बिट ऑपरेटिंग सिस्टम पर?
स्टीफन सी

4

कृपया नीचे दिए गए कमांड को 6GB करने के लिए ढेर का आकार बदलने के लिए उपयोग करें

export JAVA_OPTS="-Xms6144m -Xmx6144m -XX:NewSize=256m -XX:MaxNewSize=356m -XX:PermSize=256m -XX:MaxPermSize=356m"

अगर मेरे सिस्टम में 8G मेमोरी है और मैं टास्क मैनेजर से देख सकता हूँ कि 70% उपयोग में है; यह 6 जी मेमोरी को जावा हीप आकार में आवंटित करना संभव है?
रेहान_मं

1
@Reyhan_amn हां और नहीं, यदि आप अपनी मेमोरी को पार कर जाते हैं तो यह पेजिंग में चला जाएगा, जो डिस्क पर है और अविश्वसनीय रूप से धीमा है। यदि आप पृष्ठ फ़ाइलों को पार करते हैं तो आप बुरे समय के लिए हैं।
कोडमोंकी

2

कई लोगों ने jvm विकल्पों के साथ ढेर के आकार के लिए विशिष्ट उत्तर दिए -Xmsऔर -Xms। मैं यह बताना चाहता हूं कि यह jvm के लिए एकमात्र प्रकार का मेमोरी विकल्प नहीं है। विशेष रूप से यदि आप प्रवाह पर ढेर हो रहे हैं, तो आप अतिरिक्त विकल्प जैसे जोड़कर ढेर का आकार बढ़ाना चाहेंगे-Xss8m

इस समस्या के लिए, जैसे कुछ के jvm विकल्प -Xms2g -Xmx6g -Xss8m समाधान होगा।

मैं इस जानकारी को अपनी Google खोजों के रूप में साझा कर रहा हूं कि jvm मेमोरी को कैसे बढ़ाया जाए, मुझे इस समाधान में ले गया, और समाधान उच्च मात्रा में मेमोरी आवंटन के साथ काम नहीं किया। एक बार जब मुझे पता चल गया कि विशिष्ट सेटिंग्स क्या हैं, तो मैं Google को स्टैक आकार बढ़ाने के लिए और लापता पारम का पता लगाने में सक्षम था। :) आशा है कि यह दूसरों का समय बचाता है, क्योंकि यह मुझे एक टन समय की बचत करेगा। :)


2

यह केवल जावा के 64 बिट संस्करण के साथ काम करता है। कंट्रोल पैनल पर जाएं और जावा आइकन पर क्लिक करें। जावा कंट्रोल पैनल की छोटी विंडो पर, जावा मेनू बार पर क्लिक करें और फिर क्लिक करेंview बटन क्लिक करें।

यदि आपके पास दो जावा प्लेटफ़ॉर्म हैं, तो जावा के पिछले संस्करण को अक्षम करें, फिर रनटाइम पैरामीटर टेक्स्ट फ़ील्ड पर क्लिक करें और -Xmx1024mरैम आकार से कम या कम लिखें । रैम के बराबर हीप साइज न बढ़ाएं अन्यथा आपका सिस्टम क्रैश हो जाएगा।


यदि आप ढेर का आकार रैम के बराबर बनाते हैं, तो सिस्टम क्रैश नहीं होगा। इसके बजाय, सिस्टम पेजिंग करना शुरू कर देगा और अच्छा और धीमा हो जाएगा।
डेविमेन

0

हाँ। आप ऐसा कर सकते हैं।

आप अपनी हीप मेमोरी को 75% भौतिक मेमोरी (6 जीबी हीप) या उससे अधिक तक बढ़ा सकते हैं।

चूंकि आप 64 बिट का उपयोग कर रहे हैं, आप अपनी वांछित मात्रा तक अपने ढेर का आकार बढ़ा सकते हैं। यदि आप 32 बिट का उपयोग कर रहे हैं तो यह 4GB तक सीमित है।

$ java -Xms512m -Xmx6144m JavaApplication

आपको शुरुआती ढेर के आकार के साथ 512mb और अधिकतम 6GB करने के लिए सेट करता है।

आशा करता हूँ की ये काम करेगा.. :)


यह कुछ साल पहले पोस्ट किए गए दो शीर्ष मतदान उत्तरों के समान है।
बर्नहार्ड बार्कर

0

मुझे अपने java कोड में py फाइलें चलाने में समस्या है ग्रहण / एसटीएस का उपयोग करके अपर्याप्त jvm हीप मेमोरी के कारण PyException प्राप्त करना। मैंने नीचे बताए अनुसार बदलाव किए हैं और मैं इस मुद्दे को हल करने में सक्षम हूं। नीचे मेरा सिस्टम कॉन्फ़िगरेशन है।

यहां छवि विवरण दर्ज करें

और ये वो बदलाव हैं जो मैंने अपने कार्यक्षेत्र में किए थे और यह अब सही चलता है।

यहां छवि विवरण दर्ज करें यहां छवि विवरण दर्ज करें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.