2010-01-19 11 views
18

के लिए अधिकतम मेमोरी 64-बिट प्लेटफॉर्म पर जावा के लिए आवंटित अधिकतम स्थान की अधिकतम मात्रा क्या है? क्या यह असीमित है?64 बिट जावा

+0

आपको ऐसा क्यों लगता है कि यह असीमित है? –

उत्तर

16

सैद्धांतिक रूप से 2 , लेकिन वहाँ हो सकता है (जाहिर है)

this FAQ के अनुसार यह केवल स्मृति और स्थानीय सिस्टम पर स्वैप स्पेस द्वारा सीमित है:

पर 64-बिट VM, आप 64 बिट्स है काम करने के लिए उत्तरदायित्व के परिणामस्वरूप अधिकतम जावा हीप आकार केवल भौतिक स्मृति की मात्रा और आपके सिस्टम द्वारा प्रदान की जाने वाली स्वैप स्थान से सीमित है।

यह भी देखें कि मुझे 32-बिट JVM के साथ एक बड़ा ढेर क्यों नहीं मिल सकता है?

यह भी ध्यान रखें कि आपको कमांड लाइन के माध्यम से अधिकतम ढेर सेट करने की आवश्यकता है। एक एक्सएमएक्स कमांड के बिना। इसके बिना जावा एक ही एफएक्यू के अनुसार 64 बिट मशीनों पर एक डिफ़ॉल्ट अधिकतम ढेर के रूप में 64 एमबी + 30% = 83.2 एमबी का उपयोग करता है।

java -Xmx1000g myClass 

मेरी मशीन पर ठीक काम करता है। लेकिन यह अभी तक 'टी' संशोधक का समर्थन नहीं करता है, इसलिए आप अभी तक टेराबाइट्स में अधिकतम मेमोरी निर्दिष्ट नहीं कर सकते हैं :)

+0

1000g आपके लिए काम किया? मैंने सोचा कि उस विकल्प को लेने से पहले पर्याप्त स्मृति होने पर 'जावा' मान्य होगा। – asgs

13

यदि आप ब्रह्मांड में प्रत्येक परमाणु को रैम के बाइट में बना सकते हैं, तो आप इसे 64 बिट एड्रेस स्पेस में आवंटित कर सकते हैं।

असल में, यह मामूली असाधारण है।

ब्रह्मांड में 10^80 परमाणु (वोल्फ्राम एल्फा के अनुसार), और 64 बिट सिस्टम में पता स्थान के 2^64 बाइट्स हैं, इसलिए आप केवल 5x10^60 परमाणुओं में से 1 को संबोधित करने में सक्षम होंगे । लेकिन यदि आपके पास रैम के 18 क्विंटल बाइट्स हैं, तो आपको शायद इसे मापने के लिए कुछ क्वांटम ब्लैक होल की आवश्यकता होगी।

+0

@ स्टीफन, मैंने आपकी टिप्पणी पोस्ट करने से पहले जवाब संपादित किया। WolframAlpha नियम! –

+2

उस पर एक पूर्ण संग्रह के लिए इंतजार नहीं करना चाहता! – overthink

+4

आपको ब्रह्मांड में प्रत्येक परमाणु को इंडेक्स करने के लिए 266 बिट्स की आवश्यकता है –

0

सिद्धांत में यह 2^63 और 2^64 बाइट्स के बीच है।

अभ्यास में यह आपकी मशीन पर उपलब्ध भौतिक स्मृति और स्वैप स्थान की मात्रा से सीमित है। और भौतिक स्मृति बदले में आपके चिपसेट द्वारा सीमित है (यानी भौतिक स्मृति पता बस पर पता पिन की संख्या) और मदरबोर्ड (यानी डीआईएमएम सॉकेट की संख्या और आकार)।

+2

AMD64 के लिए, वर्तमान चश्मे 40-52 पता पिनों की पूर्ति करते हैं। साथ ही, वे NUMA आर्किटेक्चर का समर्थन करते हैं जहां प्रत्येक प्रोसेसर में स्मृति का एक हिस्सा होता है जो अन्य प्रोसेसर केवल अप्रत्यक्ष रूप से पहुंच सकते हैं। – MSalters

3

यह शायद प्रणाली अपने वीएम में चल रहा है पर निर्भर करता है। यदि आप एक AMD x64 वास्तुकला वर्तमान में भेज दिया प्रोसेसर की पता स्थान 48 बिट्स, नहीं 64 यह मोटे तौर पर 256 टीबी के एक सैद्धांतिक अधिकतम में परिणाम का उपयोग करता चला रहे हैं। (http://en.wikipedia.org/wiki/X86-64 देखें)

मैं वीएम में विशेषज्ञ नहीं हूं, लेकिन कोई भी आधुनिक ओएस आमतौर पर उतनी ही स्मृति देगा जितना भौतिक रैम प्लस उपलब्ध वर्चुअल मेमोरी है। शायद यह है कि वीएम आपके कॉन्फ़िगरेशन के आधार पर आपके एप्लिकेशन को पास करेगा।

+3

प्रासंगिक एएमडी मैनुअल बताता है कि वर्चुअल एड्रेस स्पेस वास्तव में 64 बिट्स (अध्याय 2.2.1, एएमडी 64 आर्किटेक्चर प्रोग्रामर मैनुअल, v3.14, सितंबर 2007) – MSalters

2

सूर्य से हाल ही के वीएम के साथ, व्यावहारिक ढेर सीमा का आकार आम तौर पर उपलब्ध भौतिक और/या आभासी स्मृति 512 गुना होता है। यहां तक ​​कि यदि सैद्धांतिक सीमा बहुत अधिक है, तो वीएम स्टार्टअप पर प्रत्येक 512 बाइट्स ढेर मेमोरी के लिए मैंगमेंट उद्देश्यों के लिए 1 बाइट आवंटित करेगा, इसलिए 1TB ढेर को तुरंत मेमोरी प्रबंधन के लिए 2 जीबी की आवश्यकता होगी। सीमाओं

+0

क्या आप कृपया एक संदर्भ उद्धृत कर सकते हैं? – Fakrudeen

+0

क्या एक संदर्भ है? – jarnbjo

+0

512 बार बात ... – Fakrudeen

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