ऑब्जेक्ट हीप के लिए पर्याप्त स्थान आरक्षित नहीं किया जा सका


277

जब भी मैं कार्यक्रम चलाने की कोशिश करता हूं, मुझे हर बार निम्न अपवाद मिल रहा है।

VM के प्रारंभ के दौरान त्रुटि हुई

ऑब्जेक्ट हीप के लिए पर्याप्त स्थान आरक्षित नहीं किया जा सका

जावा वर्चुअल मशीन नहीं बन सकी।

मैंने अपनी वर्चुअल मेमोरी (पेज साइज़) और रैम साइज़ बढ़ाने की कोशिश की, लेकिन कोई फायदा नहीं हुआ।

मैं इस त्रुटि को कैसे समाप्त कर सकता हूं?



2
अपनी वर्चुअल मशीन पर jdk / jre 1.6 का उपयोग करते समय मुझे भी यह त्रुटि मिलती है, टिप्पणियों में दिए गए कॉन्फ़िगरेशन मूल्यों को बदलने की कोशिश की, लेकिन यह मदद नहीं कर रहा था, jdk 1.7 को अपडेट करने के बाद त्रुटि हो गई है और बड़े Xmx मापदंडों को लागू किया गया है। लगता है कि जावा 1.6 के बाद से ढेर के उपयोग के साथ कई बदलाव हैं।
अलेक्जेंडर.लज्जुस्किन

जवाबों:


214

-XX:MaxHeapSize=512m(या किसी बड़ी संख्या के साथ जेवीएम चलाएं ) (या -Xmx512mसंक्षेप में)


42
या कम, -mx256m या -mx512m;)
पीटर लॉरी

8
Is -mx एक ही है -Xmx और -XX: MaxHeapSize?
एरी सीडोहल

19
धन्यवाद .. पता चला कि बहुत बड़ी संख्या भी एक मुद्दा हो सकती है और वही त्रुटि दे सकती है!
दिनेश राजन

17
किसी को भी एक समाधान है कि वास्तव में समय का 100% काम मिल गया? यह समाधान समस्या को अस्थायी रूप से हल करता है लेकिन फिर अचानक वापस आ जाता है। मुझे 16GB RAM मिली है और मैं इस sh * t से थक गया हूं। पुराने दिनों में सब कुछ बेहतर था: [
निलज़ोर

6
X86 या x64 जावा के साथ विंडोज 8 पर मेरे लिए काम नहीं करता है।
एंड्रयूस्मी जूल 27'15

128

उदाहरण के लिए, 32-बिट हॉटस्पॉट vm पर कुछ बहुत बड़ा सेट करने के कारण यह भी हो सकता है:

-Xms1536m -Xmx1536m

यह कहां काम करेगा / :

-Xms1336m -Xmx1336m

5
मैं यह बताना भूल गया कि 32-बिट कमांड शेल में लॉन्च करते समय यह समस्या उत्पन्न होगी। 64-बिट कमांड शेल में यह समस्या नहीं हो सकती है।
djangofan

मेरे लिए यह डिफ़ॉल्ट मान के साथ विफल रहा और एक मूल्य के साथ बहुत बड़ा है इसलिए सुनिश्चित करें कि आप कई मान आज़माएं। जवाब के लिए धन्यवाद!
ट्रैक्स

47

इसे ठीक करने का तरीका यहां दिया गया है:

  • स्टार्ट-> कंट्रोल पैनल-> ​​सिस्टम-> एडवांस (टैब) -> एनवायरनमेंट वेरिएबल्स-> सिस्टम पर जाएं

    चर-> नया: चर नाम: _JAVA_OPTIONS चर मान: -Xmx512M चर नाम: Path
    चर मान:%PATH%;C:\Program Files\Java\jre6\bin;F:\JDK\bin;

इसे अपने उपयुक्त पथ में बदलें।


1
इस जवाब के समान , मैं कहूंगा ...
15:1

अच्छा था। उपरोक्त के साथ यह एक भी देखें। stackoverflow.com/a/9350506/967638
अमरनाथ

46

मैं javac का उपयोग करते समय इस में भाग गया, और यह कमांड लाइन विकल्पों पर लेने के लिए प्रतीत नहीं होता है,

-bash-3.2$ javac -Xmx256M HelloWorldApp.java 
Error occurred during initialization of VM
Could not reserve enough space for object heap
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.

तो यहाँ समाधान तो यह सेट _JAVA_OPTIONS

-bash-3.2$ export _JAVA_OPTIONS="-Xmx256M"
-bash-3.2$ javac HelloWorldApp.java 
Picked up _JAVA_OPTIONS: -Xmx256M

और यह ठीक संकलन करता है।

यह मेरे साथ मशीनों पर होता है जिसमें बहुत सारी रैम होती है, लेकिन कम मेमोरी के साथ। जावा एक बड़े ढेर को आवंटित करने का निर्णय लेता है क्योंकि यह मशीन में रैम का पता लगाता है, लेकिन अल्सर की वजह से इसे आवंटित करने की अनुमति नहीं है।


1
+1 इंगित करने के लिए _JAVA_OPTIONS - मेरे मामले में जावा को एक शेल स्क्रिप्ट के भीतर कहीं गहरे से बुलाया जाता है, जिसमें मेरा कोई लेखन नहीं है, इसलिए यह विकल्प बेहतर है।
Gerrit

मुझे भी। मैं विश्वविद्यालय के कंप्यूटरों का उपयोग कर रहा हूं इसलिए मैं एक व्यवस्थापक नहीं हूं (पर्यावरण चर नहीं बदल सकता) और कमांड लाइन विकल्प बिल्कुल भी काम नहीं कर रहा था। बहुत बहुत धन्यवाद!
किम्बलुई

38

32-बिट जावा को चलाने के लिए मेमोरी में सन्निहित मुक्त स्थान की आवश्यकता होती है। यदि आप एक बड़े हीप आकार को निर्दिष्ट करते हैं, तो आपके पास आवश्यकता से अधिक खाली स्थान उपलब्ध होने पर भी स्मृति में इतना अधिक सन्निहित खाली स्थान नहीं हो सकता है।

जावा का 64-बिट संस्करण स्थापित करने से इन मामलों में मदद मिलती है, सन्निहित स्मृति आवश्यकताएँ केवल 32-बिट जावा पर लागू होती हैं।


1
मुझे लगता है कि यह सबसे अच्छा जवाब है अगर आप -Xmx [bignumber] m विकल्प का उपयोग करने के बाद त्रुटि प्राप्त करते रहें। अपाचे जेमीटर को ठीक से चलाने में मेरी मदद की।
RuudvK

मैंने एक बिल्कुल नया प्रोजेक्ट बनाया, जिसमें ऑटो के अलावा कोई अन्य कोड मुख्य गतिविधि नहीं थी, और इसने इस त्रुटि का उत्पादन किया
behelit

1
मैं दूसरा @RuudvK। 64-बिट स्थापित करने से मुझे मेमोरी आवंटन त्रुटि को साफ़ करते हुए अधिकतम मेमोरी बढ़ाने की अनुमति मिली। यह स्वीकृत उत्तर होना चाहिए।
जे वेज़ी

28

सुनिश्चित करें कि आप 64-बिट VM चला रहे हैं बनाने के लिए -mx512M उपयोग -64 के साथ संयुक्त। 64-बिट मशीन पर मुझे लगा कि मैं 64-बिट वर्चुअल मशीन चला रहा हूं, लेकिन नहीं। 64-बिट जावा स्थापित करने के बाद -d64 विकल्प काम करता है और -Xmx बहुत बड़े मेमोरी साइज की अनुमति देता है।

java -d64 -Xmx512M mypackage.Test

4
यह उत्तर सबसे ऊपर होना चाहिए। इस मुद्दे से जूझ रहे दो महीने, बस महसूस करने के लिए कि 64 बिट जावा स्थापित करने से समस्या हल हो गई (-d64 विकल्प मेरे मामले में आवश्यक नहीं था)
Nilzor

पिकअप _JAVA_OPTIONS: -d64 -Xmx1024M अपरिचित विकल्प: -d64 JVM प्रारंभ नहीं किया जा सका। अधिकतम ढेर का आकार (-Xmx) बहुत बड़ा हो सकता है या एंटीवायरस या फ़ायरवॉल टूल निष्पादन को रोक सकता है।
अलेक्जेंडर

14

मुझे वही त्रुटि मिली और इसे run.conf.bat में कॉन्फ़िगर करके हल किया गया

Jboss5x में कॉन्फ़िगर रन.conf.bat के साथ JVM चलाएं

यदि मुफ्त मेमोरी उपलब्ध नहीं है, तो आप स्टेटमेंट में गुजर रहे हैं तो कृपया run.conf.bat में बदलाव करें

set "JAVA_OPTS=-Xms512m -Xmx512m -XX:MaxPermSize=256m"

7

मुझे पता है कि यहां पहले से ही बहुत सारे उत्तर हैं, लेकिन उनमें से किसी ने भी मेरी मदद नहीं की। अंत में मैंने फ़ाइल को खोला /etc/elasticsearch/jvm.optionsऔर बदल दिया:

-Xms2G
-Xmx2G

सेवा

-Xms256M
-Xmx256M

यह मेरे लिए हल है। उम्मीद है कि यह यहाँ किसी और की मदद करता है।


7

मेरे पास ऐसे ही मुद्दे थे। मैंने 64 बिट मशीन पर जावा का 32 बिट संस्करण स्थापित किया था।

उस संस्करण की स्थापना रद्द करने और जावा के 64 बिट संस्करण को स्थापित करने से। मैं मुद्दे को हल करने में सक्षम था।


6

मान लीजिए आपकी कक्षा को Testपैकेज में कहा जाता है mypackage। अपना कोड इस तरह चलाएं:

java -Xmx1024m mypackage.Test

यह आपके कोड के लिए 1024 MB का ढेर स्थान आरक्षित करेगा। यदि आप 512 एमबी चाहते हैं, तो आप उपयोग कर सकते हैं:

java -Xmx512m mypackage.Test

में थोड़ा मीटर का प्रयोग करें 1024m, 512m, आदि


6

कभी-कभी, यह त्रुटि इंगित करती है कि सर्वर पर भौतिक मेमोरी और स्वैप वास्तव में पूरी तरह से उपयोग किए जाते हैं!

मैं इस समस्या को हाल ही में 48 GB RAM के साथ RedHat Enterprise Linux 5.7 चलाने वाले सर्वर पर देख रहा था। मैंने पाया कि अभी भी चल रहा है

java -version

उसी त्रुटि के कारण, जिसने यह स्थापित किया कि समस्या मेरे आवेदन के लिए विशिष्ट नहीं थी।

चल रहा है

cat /proc/meminfo

बताया गया कि मेमफ्री और स्वैपफ्री क्रमशः मेमोटोटल और स्वोटोटल मूल्यों के 1% से कम थे।

MemTotal:     49300620 kB
MemFree:        146376 kB
...
SwapTotal:     4192956 kB
SwapFree:         1364 kB

मशीन पर चल रहे कुछ अन्य अनुप्रयोगों को रोकने से मुफ्त मेमोरी के आंकड़े कुछ हद तक बढ़ गए:

MemTotal:     49300620 kB
MemFree:       2908664 kB
...
SwapTotal:     4192956 kB
SwapFree:      1016052 kB

इस बिंदु पर, जावा का एक नया उदाहरण ठीक शुरू होगा, और मैं अपना एप्लिकेशन चलाने में सक्षम था।

(जाहिर है, मेरे लिए, यह सिर्फ एक अस्थायी समाधान था; मेरे पास अभी भी उस मशीन पर चल रही प्रक्रियाओं की अधिक गहन परीक्षा करने के लिए एक उत्कृष्ट कार्य है, यह देखने के लिए कि क्या ऐसा कुछ है जो नाममात्र स्मृति उपयोग के स्तर को कम करने के लिए किया जा सकता है, बिना आवेदनों को रोकने का सहारा लेना।)


यहाँ भी, java -versionअसफल, भले ही शीर्ष कुछ मुक्त दिखाया: | (यह भी कहा कि वीएम के आरंभीकरण के दौरान हुई त्रुटि कभी-कभी कार्ड अंकन सरणी के लिए पर्याप्त स्थान आरक्षित नहीं कर सकती है)। तय लग रहा था कि वह सबसे ऊपर चला जाएगा, जिसके लिए प्रक्रियाएं सबसे अधिक रैम (वीआईआरटी कॉलम) का उपयोग कर रही थीं, उन्हें मार डालो [मेरे लिए पोस्टग्रैड्स, एपिडायनामिक्स]: |
रोज़रपैक

क्या यह स्मृति विखंडन के कारण हो सकता है? उपर्युक्त उत्तर में सन्निहित मुक्त स्थान का उल्लेख है।
रिक मोरित्ज़

6

त्रुटि:

त्रुटि के लिए, "vm के आरंभीकरण के दौरान हुई त्रुटि ऑब्जेक्ट हीप jboss के लिए पर्याप्त स्थान आरक्षित नहीं कर सका"

मूल कारण :

  • नीचे दिए गए अनुसार हमारे जेवीएम में अनुचित / अपर्याप्त मेमोरी आवंटन।

  • उदा। JAVA_OPTS = "- Xms1303m -Xmx1303m -XX: MaxPermSize = 256m" में jboss-eap-6.2 \ bin \ standalone.conf या "JAVA_OPTS = -Xms1G -Xmx1G -XX:" 256M " को " J " \ standalone.conf.bat जो JVM मेमोरी आवंटन पूल मापदंडों के अलावा कुछ भी नहीं है।

संकल्प :

  • ढेर का आकार बढ़ाएँ। ढेर का आकार बढ़ाने के लिए,
  • goto -> jboss-eap-6.2 \ bin \ standalone.conf.bat या jboss-eap-6.2 \ bin \ standalone.conf
  • परिवर्तन -> JAVA_OPTS = "- Xms256m -Xmx512m -XX: MaxPermSize = 256m" जहां -Xms न्यूनतम हीप आकार है और -Xmx अधिकतम ढेर आकार है।
  • आमतौर पर इसकी न्यूनतम और अधिकतम के लिए एक ही आकार की सिफारिश नहीं की जाती है।

  • यदि आप ग्रहण से अपना आवेदन चला रहे हैं,

  • सर्वर पर डबल क्लिक करें
  • 'ओपन लॉन्च कॉन्फ़िगरेशन' चुनें, आपको विंडो 'लॉन्च कॉन्फ़िगरेशन गुण संपादित करें' पर पुनर्निर्देशित किया जाएगा।
  • इस वाइंडाउन गोटो में टैब '(x) = तर्क'।
  • VM Arguments में, नीचे दिए गए अनुसार अपने ढेर का आकार निर्धारित करें
  • "-Dprogram.name = JBossTools: JBoss EAP 6.1+ रनटाइम सर्वर" -server -Xms256m -Xmx512m -XX: MaxPermSize = 256m -Dorg .jboss.resolver.warning = true

ओरेकल कमांड लाइन संदर्भ का एक उद्धरण : " सर्वश्रेष्ठ प्रदर्शन के लिए, अधिकतम-आकार के आकार के समान सेट -Xms, उदाहरण के लिए:java -Xgcprio:throughput -Xmx:64m -Xms:64m myApp "
user1438038

3

मैंने हाल ही में इस मुद्दे का सामना किया। मेरे पास 3 जावा एप्लिकेशन हैं जो 1024 मीटर या 1280 मीटर के आकार के साथ शुरू होते हैं। जावा स्वैप में उपलब्ध स्थान को देख रहा है, और यदि पर्याप्त मेमोरी उपलब्ध नहीं है, तो jvm बाहर निकलता है।

समस्या को हल करने के लिए, मुझे कई कार्यक्रमों को समाप्त करना पड़ा जिसमें बड़ी मात्रा में आभासी मेमोरी आवंटित की गई थी।

मैं 64-बिट jvm के साथ x86-64 लाइनक्स पर चल रहा था।


3

मेरे पास मेमोरी सेटिंग्स की सही मात्रा थी, लेकिन मेरे लिए यह 32 बिट जेवीएम के साथ 64 बिट इंटेलीज का उपयोग कर रहा था। एक बार जब मैंने 64 बिट वीएम पर स्विच किया, तो त्रुटि हो गई थी।



2

यदि आप 32 बिट जेवीएम चला रहे हैं, तो आकार को छोटे से प्रोबाइबल की मदद से बदल दें। आप इसे सीधे java में पास करके या enviroment वैरिएबल्स के माध्यम से कर सकते हैं जैसे कि,

java -Xms128M -Xmx512M
JAVA_OPTS="-Xms128M -Xmx512M"

64 बिट जेवीएम के लिए, बड़े हीप आकार जैसे -Xms512M -Xmx1536Mकाम करना चाहिए।

जावा 7 के लिए रन java -versionया java -d32, java--d64यह जांचने के लिए कि आप कौन सा संस्करण चला रहे हैं।


1

वैसे भी, इसे ठीक करने का तरीका यहां बताया गया है: प्रारंभ पर जाएं- नियंत्रण कक्ष-> सिस्टम-> उन्नत (टैब) -> पर्यावरण चर-> प्रणाली चर-> नया: परिवर्तनीय नाम: _JAVA_OPTIONS चर मूल्य: -Xmx512M

या

नीचे दिखाए अनुसार चींटी कॉल को बदलें।

   <exec
        **<arg value="-J-Xmx512m" />**
    </exec>

इसने मेरे लिए काम किया।


1

VM के आरंभीकरण के दौरान हुई त्रुटि 1572864KB ऑब्जेक्ट हीप के लिए पर्याप्त स्थान आरक्षित नहीं कर सकी

मैंने सेटिंग्स में मेमोरी का मान बदल दिया है। फ़ाइल 1536 से 512 हो गई और इससे मदद मिली


1

स्टार्ट पर जाएं-> कंट्रोल पैनल-> ​​सिस्टम-> एडवांस (टैब) -> एनवायरनमेंट वेरिएबल्स-> सिस्टम वेरिएबल्स-> नया वर्जन:

Variable name: _JAVA_OPTIONS
Variable value: -Xmx512M

इसे विश्व स्तर पर स्थापित करने से ढेर का आकार सीमित हो जाता है जिसे आप इंटेलीज को दे सकते हैं।
user3056052

0

यदि आप एक जावा प्रोग्राम चला रहे हैं: - अपने प्रोग्राम को टर्मिनल में सही कमांड का उपयोग करके लाइनक्स के लिए चलाएं, तो यह होगा 'java -jar myprogram.jar' और add -Xms256m -Xmx512m, उदाहरण के लिए 'java-myrgram.jar' Xms256m -Xmx512m '

यदि आप एक .sh स्क्रिप्ट (linux, mac?) चला रहे हैं या एक .bat स्क्रिप्ट (विंडोज़) स्क्रिप्ट खोलते हैं और जावा विकल्प खोजते हैं यदि वे मौजूद हैं और मेमोरी बढ़ाते हैं।

यदि उपर्युक्त सभी काम नहीं करते हैं, तो अपनी प्रक्रियाओं (ctrl + alt + delete windows पर) (psux on linux / mac) की जांच करें और उन प्रक्रियाओं को मार दें जो मेमोरी के आवंटन का उपयोग करती हैं और आपके ऑपरेटिंग सिस्टम के लिए आवश्यक नहीं हैं! => अपने कार्यक्रम को फिर से चलाने की कोशिश करें।


0

CASSANDRA_HOME / bin / cassandra.bat में आपको निम्नलिखित कॉन्फ़िगरेशन मिलेगा

REM JVM Opts we'll use in legacy run or installation
set JAVA_OPTS=-ea^
 -javaagent:"%CASSANDRA_HOME%\lib\jamm-0.3.0.jar"^
 -Xms**2G**^
 -Xmx**2G**^

आप 2G को कुछ छोटी संख्या जैसे 1G या उससे भी कम के लिए कम कर सकते हैं और यह काम करना चाहिए।

यदि आप यूनिक्स बॉक्स पर चल रहे हैं तो भी, .sh फ़ाइल को उचित रूप से बदलें।


0

मुझे वही त्रुटि मिली और इसे तब हल किया गया जब मैंने% temp% का उपयोग करके अस्थायी फ़ाइलों को हटा दिया और ग्रहण को पुनः आरंभ किया।


0

कभी-कभी यह संबंधित है

$ sysctl vm.overcommit_memory
vm.overcommit_memory = 2

यदि आप इसे सेट करते हैं:

$ sysctl vm.overcommit_memory=0

यह काम करना चाहिए।


0

कैसेंड्रा बिन निर्देशिका में cassandra.bat फ़ाइल में किसी भी बड़े मेमोरी साइज़ के -Xmx2Gसाथ बदलें -Xms512M


0

Android फ़ोल्डर में gradle.properties फ़ाइल खोलें।

इस पंक्ति को बदलें:

org.gradle.jvmargs=-Xmx1536M

साथ में:

org.gradle.jvmargs=-Xmx512m

स्पष्टीकरण: ग्रेड दस्तावेज़ से अधिकतम सीमा:

यदि अनुरोधित बिल्ड वातावरण अधिकतम ढेर आकार निर्दिष्ट नहीं करता है, तो डेमन 512MB तक के ढेर का उपयोग करेगा।


-2

नीचे की तरह POM फ़ाइल में सिर्फ chnage करने के लिए कुछ भी करने की आवश्यकता नहीं है

<configuration>
    <maxmemory>1024M</maxmemory>
</configuration>

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