2009-12-22 5 views
6

12 जीबी रैम और 33 जीबी वर्चुअल मेमोरी (प्रति कार्य प्रबंधक) के साथ 64-बिट विंडोज मशीन पर, मैं 3.5TB की असंभव -Xmx सेटिंग के साथ जावा (1.6.0_03-b05) चलाने में सक्षम हूं लेकिन यह विफल रहता है 35 टीबी के साथ। जब यह काम करता है और जब यह विफल रहता है तो पीछे तर्क क्या है? 35TB पर त्रुटि का अर्थ यह है कि यह स्टार्टअप पर स्थान आरक्षित करने का प्रयास कर रहा है। यह -Xmx के लिए ऐसा क्यों करेगा (-XMS के विपरीत)?मैं विंडोज और सोलारिस दोनों पर मशीन पर भौतिक और वर्चुअल मेमोरी से अधिक मूल्य के लिए -Xmx क्यों सेट कर सकता हूं?

 
C:\temp>java -Xmx3500g ostest 
os.arch=amd64 
13781729280 Bytes RAM 

C:\temp>java -Xmx35000g ostest 
Error occurred during initialization of VM 
Could not reserve enough space for object heap 
Could not create the Java virtual machine. 

सोलारिस पर (4GB RAM, जावा 1.5.0_16), मैं बहुत ज्यादा 1 PB पर कैसे उच्च मैं -Xmx सेट कर सकते हैं पर दे दी है। मैं तर्क को समझ नहीं पा रहा हूं कि यह एक्सएक्सएक्स सेटिंग पर कब त्रुटि होगी।

 
devsun1.mgo:/export/home/mgo> java -d64 -Xmx1000000g ostest 
os.arch=sparcv9 
4294967296 Bytes RAM 

उत्तर

11

विंडोज के लिए कम से कम 64-बिट वीएम 1.6.0_17 के साथ, ऑब्जेक्ट स्टार्टअरे :: प्रारंभिक वीएम स्टार्टअप पर प्रत्येक 512 बाइट्स के ढेर के लिए 1 बाइट आवंटित करेगा। 35 टीबी ढेर के साथ वीएम शुरू करने से वीएम तुरंत 70 जीबी आवंटित कर देगा और इसलिए आपके सिस्टम पर असफल हो जाएगा।

सूर्य से 64-बिट वीएम (और इसलिए मुझे लगता है कि 64-बिट वीएम) अधिकतम ढेर की गणना करते समय उपलब्ध भौतिक स्मृति के लिए खाता नहीं लेता है, लेकिन केवल विंडोज और लिनक्स पर 2 जीबी एड्रेस करने योग्य मेमोरी द्वारा सीमित है या सोलारिस पर 4 जीबी या संभवतः प्रबंधन क्षेत्र के लिए स्टार्टअप पर पर्याप्त स्मृति आवंटित करने में असफल रहा।

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

8

this thread सूर्य की जावा मंचों पर के अनुसार (ओ पी भौतिक स्मृति की 16GB है):

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

अद्यतन: मैं Frequently Asked Questions About the Java HotSpot VM और अधिक सटीक के अनुसार आगे थोड़ा googled और, How large a heap can I create using a 64-bit VM?

मैं एक 64-बिट वी एम का उपयोग कर कितना बड़ा एक ढेर बना सकते हैं?

64-बिट VMs पर, आप पता योग्यता की 64 बिट्स केवल भौतिक स्मृति और स्वैप स्पेस आपके सिस्टम प्रदान करता है की राशि से एक अधिकतम जावा ढेर आकार सीमित में जिसके परिणामस्वरूप के साथ काम करना है।
भी Why can't I get a larger heap with the 32-bit JVM?

देखें मैं तुम क्यों एक ढेर> 45GB के साथ एक JVM शुरू करने के लिए सक्षम हैं पता नहीं है। यह थोड़ा उलझन में है ...

1

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

क्या होता है (कम से कम यह लॉग और परीक्षण चलाने के दिनों के बाद इसका मेरा मूल्यांकन है), विंडोज़ राम से बाहर चला जाता है और सभी ऐप्स को जो कुछ भी कर सकता है उसे मुक्त करने के लिए कहता है। जब यह जावा से पूछता है, जावा एक जीसी बंद कर देता है। जीसी सभी मेमोरी को छूता है (जो कुछ भी बदल दिया गया है उसे बदल दिया गया है)। यह बदले में विंडोज़ को स्मृति से बाहर निकलने का कारण बनता है। विंडोज़ उन सभी ऐप्स को एक संदेश भेजता है जो उन्हें पूछने के लिए कहता है कि वे क्या कर सकते हैं .... (अनिश्चित काल तक रिकर्स करें)

यह वास्तव में नहीं हो रहा है कि क्या हो रहा है, लेकिन तथ्य यह है कि जावा जीसी कई बार पुरानी मेमोरी को छूता है यह पेजिंग के साथ असंगत बनाता है।

संबंधित मुद्दे