2008-10-15 31 views
12

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

उत्तर

20

प्रतिबद्ध आकार वास्तव में आवंटित स्मृति है, उपयोग किया जाने वाला आकार वास्तविक डेटा को संग्रहीत करने के लिए उपयोग किया जाता है (जब इस्तेमाल किया गया = = यह महत्वपूर्ण जीसी के लिए समय है और संभवतः ढेर बढ़ रहा है)। अधिकतम आकार वह सीमा है जिसकी ढेर बढ़ सकती है - यदि यह पर्याप्त नहीं है तो JVM OutOfMemoryError फेंकता है।

यदि कोई स्मृति प्रतिबद्ध है तो यह निश्चित रूप से उपयोग किया जा सकता है। साथ ही, एकमात्र अवसर जब JVM अधिक स्मृति (एक आधुनिक ओएस पर) करने में सक्षम नहीं होगा, तो हार्डवेयर वर्चुअल मेमोरी से बाहर है।

ये सभी आकार केवल आपको हीप क्षेत्र का आकार बताते हैं। जेवीएम में अन्य मेमोरी क्षेत्र भी हैं (थ्रेड स्टैक्स, जेआईटी कैश इत्यादि) ढेर क्षेत्र आमतौर पर सबसे बड़ा होता है, यह मोटे तौर पर प्रक्रिया पदचिह्न से मेल खाता है।

दो टिप्पणियां:

  • अगर प्रतिबद्ध आकार भौतिक स्मृति में फिट नहीं है, यह के कुछ हिस्सों पेज फाइल करने के लिए बदली की जाएगी। इससे जीसी के दौरान बड़ी मंदी आती है और ऐसे मामलों में आप ढेर के आकार को कम करके ऐप प्रदर्शन में सुधार करेंगे।
  • कुछ ऑपरेटिंग सिस्टम स्मृति के दोहरे बुकिंग की अनुमति देते हैं - आप के रूप में ज्यादा आप जब तक आप इसे उपयोग करने के लिए कोशिश मत करो के रूप में चाहते हैं के रूप में आवंटित कर सकते हैं (भूल गया जो OS यह था - किसी ने मुझसे भरें)
+2

कम से कम लिनक्स यह डबल-बुकिंग कर सकता है; इसे "ओवरकमिट" कहा जाता है। http://opsmonkey.blogspot.com/2007/01/linux-memory-overcommit.html – sleske

+0

"प्रतिबद्ध आकार वास्तव में आवंटित स्मृति है, उपयोग किया गया आकार वास्तविक डेटा संग्रहीत करने के लिए उपयोग किया जाने वाला आकार है (जब उपयोग किया जाता है ~ बड़े जीसी के लिए यह समय है और संभवतः ढेर बढ़ रहा है)। अधिकतम आकार वह सीमा है जिसकी ढेर बढ़ सकती है - यदि यह पर्याप्त नहीं है तो जेवीएम आउटऑफमेमरी एरर फेंकता है। " मेरे लिए इसका मतलब है कि कभी-कभी (यह ढेर के अधिकतम मूल्य पर निर्भर करता है, -एक्सएमएक्स) आप आउटऑफमेमरी एरर प्राप्त करेंगे? –

2

"क्या इसका मतलब यह है कि स्मृति जेवीएम प्रक्रिया द्वारा उपयोग में है और अन्य प्रक्रियाओं के लिए उपलब्ध नहीं है" सही होगा। इसलिए जेएमवी प्रक्रिया द्वारा ओएस को देखे जाने वाले मेमोरी की मात्रा (या उसके बराबर) कम होती है।

http://java.sun.com/j2se/1.5.0/docs/guide/management/jconsole.html (क्षमा करने के लिए कोई एंकर नहीं)।