2010-09-02 14 views
5

मेरे पास एक एप्लिकेशन है, जो प्लगइन को पुनः लोड करने के लिए, उन्हें पुनः लोड करने के लिए आवश्यक है: जब भी उन्हें पुनः लोड किया जाना है। मैंने देखा है कि यह एक समय में 2-3 मेगाहर्ट्ज मेमोरी का निर्माण कर रहा है। मैं उत्सुक हूं कि इस तरह की चीज क्या हो सकती है। क्या पिछले रीलोड से डेटा स्मृति में रखा जा रहा है? क्या नामस्थान पूरी तरह से पुनः लोड करने का कोई तरीका है?क्या इसके साथ उपयोग की आवश्यकता है: रीलोड विकल्प में क्लोजर में मेमोरी बनाने की प्रवृत्ति है?

संपादित करें: यह उल्लेख करना भी प्रासंगिक है कि इनमें से प्रत्येक प्लगइन जो पुनः लोड हो जाता है, एक अन्य नामस्थान में एक बहुआयामी के लिए नए defmethods बनाता है (जो कभी भी पुनः लोड नहीं होता है)। हो सकता है कि इसे पुनः लोड होने पर विधियों को स्मृति में रखा जा रहा हो?

+0

क्लोजर में विकसित होने का तरीका स्रोत को संशोधित करना है, फिर पुनः लोड विकल्प के साथ कार्यों का उपयोग/आवश्यकता है। मैंने जो वर्णन किया है, मैंने अनुभव नहीं किया है, लेकिन मैं आमतौर पर बहुआयामी का उपयोग नहीं करता हूं, और केवल कुछ फ़ंक्शंस को फिर से परिभाषित किया जाता है। –

उत्तर

1

जैसा कि यह पता चला है, मैंने इसे लंबे समय तक परीक्षण नहीं किया। स्मृति केवल एक निश्चित स्तर तक बढ़ेगी, और फिर यह रुक जाएगी और अंततः थोड़ा सा नीचे जायेगी।

लड़के और लड़कियां: बग के बारे में सोचने से पहले अपने कोड का परीक्षण करें।

1

क्लोजर जेएमवी में मेमोरी प्रबंधन को रोकता है। जबकि मुझे क्लोजर के कोडबेस को गहराई से नहीं पता है, यह संभवतः फिर से लोड किए गए कोड के साथ वर्रों को फिर से सौंपता है - जो पुरानी वस्तुओं को तब तक छोड़ देगा जब तक कि JVM कचरा कलेक्टर चलाता है।

आप जेवीएम को संकेत दे सकते हैं कि आप जीसी (सिस्टम/जीसी) का उपयोग करके चलाना चाहते हैं, लेकिन आमतौर पर इसका उपयोग करने की अनुशंसा नहीं की जाती है।

वैकल्पिक रूप से, यदि आप अपने सिस्टम की बाधाओं को जानते हैं, तो आप जीसीएम मेमोरी झंडे के साथ टिंकर कर सकते हैं ताकि जीसी को अधिक बार चलाने के लिए प्रोत्साहित किया जा सके (यानी - कम ढेर आकार का उपयोग करें)।

लेकिन यदि आपके पास ऐसी प्रणाली है जो वास्तव में स्मृति को बाधित नहीं करती है, तो कुछ एमबीएस को बचाने से कोई फर्क नहीं पड़ता।

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