2015-10-29 8 views
5

मैं कुछ समय के लिए प्रोग्रामिंग में कुछ अजीब घटनाओं को देख रहा हूं, क्योंकि लिनक्स सिस्टम पर डिफ़ॉल्ट रूप से ओवरकॉमिट सक्षम है।इतने सारे एप्लिकेशन वर्चुअल मेमोरी को अविश्वसनीय रूप से बड़ी मात्रा में आवंटित करते समय क्यों उपयोग करते हैं?

ऐसा लगता है कि प्रत्येक उच्च स्तरीय एप्लिकेशन (उदाहरण के लिए जावा, पायथन या सी # जैसे उच्च स्तर की प्रोग्रामिंग भाषा में लिखा गया अनुप्रयोग, सी ++ में लिखे कुछ डेस्कटॉप अनुप्रयोगों सहित लिखा गया है जो कि क्यूटी जैसे बड़े पुस्तकालयों का उपयोग करते हैं) की पागल राशि का उपयोग करते हैं वर्चुअल ऑपरेटिंग मेमोरी। उदाहरण के लिए, वेब ब्राउजर के लिए केवल 300 एमबी का उपयोग करते समय 20 जीबी रैम आवंटित करना सामान्य बात है। या एक डेकटॉप पर्यावरण के लिए, mysql सर्वर, रैम के गीगाबाइट के दसियों को आवंटित करने के लिए, हर जावा या मोनो एप्लिकेशन और बहुत कुछ।

ऐसा क्यों हो रहा है? मुद्दा क्या है? क्या इसमें कोई फायदा है?

मैंने देखा कि जब मैं लिनक्स में ओवरकमिट अक्षम करता हूं, तो डेस्कटॉप सिस्टम के मामले में जो वास्तव में इन अनुप्रयोगों में से बहुत से चलाता है, सिस्टम अनुपयोगी हो जाता है क्योंकि यह ठीक से बूट नहीं होता है।

उत्तर

3

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

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

इस के साथ समस्याओं कर रहे हैं:

  • यह जरूरी तेजी से नहीं है। अधिकांश ऑपरेटिंग सिस्टम पहले से ही काफी स्मार्ट हैं कि वे अपनी याददाश्त कैसे प्रबंधित करते हैं। अनुकूलन के नियम # 1, मापने, अनुकूलित करने, मापने के लिए।

  • सभी ऑपरेटिंग सिस्टम में वर्चुअल मेमोरी नहीं है। वहाँ कुछ काफी सक्षम लोग हैं जो ऐसे अनुप्रयोगों को नहीं चला सकते हैं जो इतने "लापरवाह" हैं कि यह मानते हुए कि आप बिना किसी समस्या के & बहुत सारी "असली नहीं" स्मृति आवंटित कर सकते हैं।

  • आप पहले से ही पता चला है कि यदि आप अपने ओएस को "उदार" से "सख्त" में बदल देते हैं, तो ये स्मृति हॉग उनकी नाक पर सपाट हो जाते हैं। ;-)


(*) जावा, उदाहरण के लिए, अपने वी एम का विस्तार नहीं कर सकते हैं एक बार यह शुरू कर दिया है।आपको पैरामीटर (-Xmxn) के रूप में वीएम के अधिकतम आकार देना होगा। "क्षमा से बेहतर सुरक्षित" सोचने से कुछ लोगों/अनुप्रयोगों द्वारा गंभीर समग्रता हो जाती है।

+0

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

+0

@ पीटर: "ओवरकमिट" - भौतिक स्मृति की तुलना में अधिक वर्चुअल मेमोरी गुजर रहा है - वास्तव में विंडोज और लिनक्स पर डिफ़ॉल्ट है। और यह पर्याप्त है कि कई डेवलपर्स वास्तव में बाकी कंप्यूटिंग दुनिया के बारे में परेशान न हों। ऑपरेटिंग सिस्टमों में से एक जो वर्चुअल मेमोरी "डू" नहीं करता था, उदाहरण के लिए, अमिगा ओएस 3.x - और उसने कभी जावा को "किया" नहीं था। – DevSolar

1

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

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