गैर-एमएल प्रोग्राम के साथ काम करने के बाद हाल ही में जावा-भारी है, मुझे आपका दर्द महसूस होता है।
मैं आपको यह नहीं बता सकता कि गतिशील रूप से आवंटित स्मृति को एक अविश्वसनीय तकनीकी तथ्य के आधार पर रीसेट करना है या नहीं, लेकिन मेरा व्यक्तिगत अनुभव मुझे बताता है कि यदि आप अपने जावा काम के बाद मूल आर पर्यावरण में प्रसंस्करण जारी रखने जा रहे हैं, तो आप शायद चाहिए। आप जो कर सकते हैं उसे नियंत्रित करना सबसे अच्छा है।
केवल बार मैंने कभी स्मृति शेष नहीं है (यहां तक कि बड़े पैमाने पर फ्लैट फाइलों के साथ काम) है जब मैं किसी तरह से JVM उपयोग किया गया है:
यहाँ क्यों है। यह एक बार बात नहीं है, यह अक्सर हुआ है।
यह जावा चालित एक्सएलकनेक्ट के माध्यम से बड़ी एक्सेल फ़ाइलों को पढ़ने और लिखने का भी होता है; स्मृति जल्दी से सुपर जाम हो जाता है। यह एक दूसरे के साथ आर और जावा खेलने के तरीके में विफलता प्रतीत होता है।
और, आर स्वचालित रूप से कचरा नहीं लेता है जिस तरह से आप उम्मीद करेंगे। यह तब संग्रहित होता है जब ओएस अधिक स्मृति मांगता है, लेकिन ऐसा होने से पहले चीजें धीमी हो सकती हैं।
भी आर केवल स्मृति में वस्तुओं को देखता है जो इसे बनाता है, न कि यह व्याख्या करता है, इस प्रकार आपका जावा कल्च आर के बारे में अनजान हो जाएगा। इसलिए यदि JVM ने इसे बनाया है, तो जावा इसे ऐसा नहीं करेगा अगर जावा ऐसा नहीं करता है निष्क्रिय होने से पहले। और यदि स्मृति को चुनिंदा रीसाइक्लिंग किया जाता है तो आप विखंडित स्मृति अंतराल कर सकते हैं जो प्रदर्शन को बहुत प्रभावित करता है।
मेरा व्यक्तिगत दृष्टिकोण सेट, चर, फ्रेम बनाने के लिए किया गया है ... केवल मुझे जो चाहिए, सबसेट करें, फिर rm()
और gc()
... कचरा संग्रह को हटाएं और मजबूर करें।
अगले चरण पर जाएं और भारी उठाने करें। यदि मैं जावा-आधारित पैकेज चलाता हूं, तो स्मृति को साफ रखने के लिए मैं इसे अधिक बार शुद्ध कर दूंगा।
जावा प्रक्रिया पूरी होने के बाद, मैं सब कुछ साफ़ करने के लिए detach(yourlibraryname)
और gc()
का उपयोग करता हूं।
यदि आपने 'ढेर' को समायोजित किया है, तो मैं जावा को गतिशील स्मृति को आवंटित आवंटन को कम करने के लिए फिर से समायोजित लिखूंगा, क्योंकि जावा वर्चुअल मशीन अभी भी व्यस्त है लेकिन ऑपरेट नहीं कर रही है, तो आर को वापस लेने का कोई तरीका नहीं है जहां तक मैं पता लगाने में सक्षम हूं। तो आपको इसे रीसेट करना चाहिए और आर को वापस देने के लिए आर का उपयोग करना है। मुझे लगता है कि लंबे समय तक यह आपको तेजी से प्रसंस्करण और कम लॉक-अप के साथ लाभान्वित करेगा।
सबसे अच्छा तरीका है पता करने के लिए के रूप में प्रयोग कर रहे हैं देखने के लिए कितनी देर तक अपनी स्क्रिप्ट दोनों के साथ और मजबूर कचरा संग्रह, निकालना टुकड़ी और ढेर पुनः आबंटन के बिना ले जाता है यह एक sys.time
या proc.time
समारोह का उपयोग करने के लिए है कि कैसे यह आपके सिस्टम को प्रभावित करता है।
आप कैसे इस यहाँ करने के लिए पर एक ठोस समझ प्राप्त कर सकते हैं:
IDRE -UCLE proc.time functions
आशा यह कुछ मदद करता है!