कितने प्रतिशत रैम को मैं ढेर के रूप में आवंटित कर सकता हूं


1

मेरे पास होस्ट पर 32 जीबी रैम है, जहां मुझे जावा प्रोग्राम (ऑन जेआरई 1.7 64 बिट) चलाने की आवश्यकता है।

वर्तमान में मैंने 8 जीबी को हीप मेमोरी के रूप में निर्दिष्ट किया है। मैं सोच रहा हूं कि मैं कितना बढ़ा सकता हूं? मैं सिर्फ उस होस्ट पर जावा वेबएप चलाता हूं।


1
जावा एप्लिकेशन की कितनी आवश्यकता है? इसके अलावा, आप पृथ्वी पर क्या कर रहे हैं जिसमें 8GB मेमोरी की आवश्यकता है?
डार्थ Android

Thats मुझे क्या पता लगाना चाहते हैं। यह दुनिया भर में लोगों द्वारा इस्तेमाल की जाने वाली महत्वपूर्ण प्रणाली में से एक द्वारा उपयोग किया जाता है :)
नोविस यूजर

1
आपने आवेदन क्या करता है इस पर कोई जानकारी नहीं दी है। आमतौर पर इसका उपयोग कितने ढेर से होता है? क्या यह स्मृति से बाहर चल रहा है? क्या सिस्टम पर अन्य अनुप्रयोग हैं? क्या उनके पास पर्याप्त मेमोरी है? क्या डिस्क कैश महत्वपूर्ण है? वर्तमान जानकारी के साथ प्रदान किया जा सकने वाला एकमात्र उत्तर "0% और 100% के बीच" है
डार्थ Android

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

1
आप कैसे जानते हैं कि आपको अधिक ढेर की आवश्यकता है? जब तक आप मेमोरी एरर से बाहर नहीं निकलते हैं तब तक आपको और अधिक की आवश्यकता नहीं होती है या जीसी वास्तव में अक्सर चलती है ।
डैनियल आर हिक्स

जवाबों:


2

हीप को RAM से आवंटित नहीं किया गया है। इसे वर्चुअल एड्रेस स्पेस से आवंटित किया गया है। आपके पास रैम की तुलना में अधिक ढेर हो सकता है। बहुत अधिक। जावा वीएम की भौतिक पते (रैम पते) तक कोई सीधी पहुंच नहीं है और उनके द्वारा सीमित नहीं है, आपके सिस्टम में किसी भी अन्य प्रक्रिया की तुलना में अधिक है।


हालाँकि, यदि आपने बड़े ढेर की आवश्यकता नहीं है, तो उपलब्ध रैम से बड़ा बनाने से जेवीएम धीमी (शायद बहुत धीमी) चलाने का कारण होगा ।
डैनियल आर हिक्स

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

लेकिन अगर आप ढेर को रैम से बड़ा बनाते हैं तो वर्चुअल मेमोरी डिस्क के आगे-पीछे होने लगती है। निष्पादन गति 10-100 के कारक से गिरती है।
डैनियल आर हिक्स

(यह समझें कि यदि आप ढेर को बड़ा करते हैं, तो JVM उस स्थान का उपयोग करेगा, भले ही वह आसानी से GC का उपयोग छोटे आकार में करने के लिए कर सकता है।)
डैनियल आर हिक्स

आह, आप जीसी की कमी के बारे में बात कर रहे हैं। मान लीजिए कि मेरे कोड में मैं एक बफर आवंटित करता हूं, इसे थोड़ी देर के लिए उपयोग करें, फिर इसे "फ्री" करें। यह नहीं करने से यह भविष्य में उपयोग के लिए फिर से इस्तेमाल नहीं किया जाता है। परंतु! यदि मेरा कोड इसे फिर से संदर्भित नहीं करता है (जैसा कि यह एक मुक्त क्षेत्र के लिए नहीं होना चाहिए), तो यह एक्सेस की कमी के लिए इसे बाहर रखने से कोई फर्क नहीं पड़ता। मैं मानता हूँ कि कुछ लागत है, लेकिन थ्रशिंग केवल तभी होता है जब आप वास्तव में सभी वैस तक पहुँच रहे हों
जेमी हनराहन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.