मैं पिछले डेवलपर से कुछ एप्लिकेशन ले रहा हूं। जब मैं ग्रहण के माध्यम से अनुप्रयोग चलाता हूं, तो मुझे स्मृति उपयोग दिखाई देता है और ढेर का आकार बहुत बढ़ जाता है। आगे की जांच के बाद, मैं देखता हूं कि वे एक लूप के साथ-साथ अन्य चीजों में एक वस्तु बना रहे थे।कुछ जावा मेमोरी प्रबंधन सर्वोत्तम प्रथाओं क्या हैं?
मैंने आगे बढ़ना शुरू कर दिया और कुछ साफ कर दिया। लेकिन जितना अधिक मैं गया, उतना अधिक प्रश्न मुझे पसंद आया "क्या यह वास्तव में कुछ भी करेगा?"
उदाहरण के लिए, ऊपर वर्णित लूप के बाहर एक चर घोषित करने और लूप में अपना मान सेट करने के बजाय ... उन्होंने ऑब्जेक्ट को लूप में बनाया है। क्या मेरा मतलब है:
for(int i=0; i < arrayOfStuff.size(); i++) {
String something = (String) arrayOfStuff.get(i);
...
}
बनाम
String something = null;
for(int i=0; i < arrayOfStuff.size(); i++) {
something = (String) arrayOfStuff.get(i);
}
Am मैं गलत कहना है कि नीचे पाश बेहतर है? शायद मैं गलत हूँ।
इसके अलावा, ऊपर दूसरे लूप के बाद क्या, मैंने "कुछ" वापस शून्य पर सेट किया? क्या यह कुछ स्मृति को साफ़ करेगा?
किसी भी मामले में, कुछ अच्छे मेमोरी प्रबंधन सर्वोत्तम अभ्यास क्या हैं जो मैं कर सकता हूं जो मेरे अनुप्रयोगों में मेरे मेमोरी उपयोग को कम रखने में मदद करेगा?
अद्यतन:
मैं अब तक सभी की प्रतिक्रिया की सराहना करते। हालांकि, मैं वास्तव में उपर्युक्त loops के बारे में नहीं पूछ रहा था (हालांकि आपकी सलाह से मैं पहले लूप पर वापस गया था)। मैं कुछ बेहतरीन प्रथाओं को पाने की कोशिश कर रहा हूं जिनके लिए मैं नजर रख सकता हूं। "जब आप संग्रह का उपयोग करते हैं, तो इसे साफ़ करें" की रेखाओं पर कुछ। मुझे बस यह सुनिश्चित करने की ज़रूरत है कि इन अनुप्रयोगों से ज्यादा स्मृति नहीं ली जा रही है।
अपना संपादन पुनः पढ़ें: जैसा कि तीन लोगों ने अभी तक कहा है, प्रोफाइल करें! –
मैं उपयोग करने के लिए कुछ विशिष्ट प्रथाओं की तलाश में हूं इसलिए मुझे किसी को प्रोफाइल करने की आवश्यकता नहीं है। कोड के मुकाबले मैं इसे पहले स्थान पर ठीक से विकसित करूंगा, उम्मीद करता हूं कि यह काम करता है, प्रोफाइल करें, और फिक्स करें। – Ascalonian
"विशिष्ट अभ्यास" समयपूर्व अनुकूलन किए बिना अच्छी तरह से संरचित कोड लिखना है, और उसके बाद इसे अनुकूलित करने की आवश्यकता है यह जानने के लिए प्रोफाइलिंग करना। –