2010-10-12 14 views
6

मैं एक फ़ंक्शन (जावा विधि) डिज़ाइन कर रहा हूं जिसे मोबाइल डिवाइस पर प्रति सेकंड 40-80 बार निष्पादित किया जाएगा।बेहद कुशल फ़ंक्शन को कैसे डिजाइन करें

मैं जीसी द्वारा एकत्रित मृत चर के टन का उत्पादन करने से बचना चाहता हूं, क्योंकि फ़ंक्शन चलता है (संभवतः ऐप के पूरे जीवन में)।

सी में मैं volatile का उपयोग कर सकता हूं उदाहरण के लिए, फ़ंक्शन के प्रत्येक निष्पादन में मेरे चर के स्मृति आवंटन को रोकने के लिए ... मैं जावा में कुछ ऐसा करना चाहता हूं लेकिन यह नहीं जानता कि कैसे।

में

  • 1 स्ट्रिंग समारोह भंडार डेटा
  • 4 पूर्णांकों
  • 2 1-आयामी स्ट्रिंग सरणियों

सामान्य में, जावा में, उपयोग करने के लिए पसंदीदा तरीका है क्या उपर्युक्त चर, लेकिन जब भी मेरा फ़ंक्शन निष्पादित होता है (प्रति सेकंड 40+ बार) उन्हें फिर से आवंटित नहीं किया जाता है?

सदस्य चर "काम" करेंगे लेकिन क्या यह सबसे अच्छा समाधान है?

धन्यवाद! ब्रैड

+0

क्या इसे फिर से प्रवेश करना होगा? – Nim

+2

कोड नमूना उपयोगी होगा –

+2

उत्सुक है कि आप मोबाइल डिवाइस पर 40+ बार एक सेकंड क्या कर रहे हैं? –

उत्तर

3
  • कक्षा में उन क्षेत्रों को लपेटें {जावा ऑब्जेक्ट को देखना पसंद करता है} और इसे एक बार आवंटित करें और इसका उपयोग करें।
  • मन में स्ट्रिंग पूल अवधारणा रखने के रूप में आप स्ट्रिंग सरणी
+0

-1। एक स्थैतिक क्षेत्र का उपयोग करने से बिल्कुल कुछ नहीं किया जाता है कि कितनी बार आवंटित किया जाता है। केवल प्रासंगिक बात यह है कि वस्तुओं को कितनी बार बनाया जाता है (उदाहरण के लिए 'नया' ऑपरेटर कितनी बार उपयोग किया जाता है) –

+0

@ मार्क जो समान रूप से सत्य है। मेरा उत्तर चेक करें –

+0

स्टेटिक का अर्थ यह नहीं बदलेगा। समस्या यह है कि चर के लिए प्रत्येक कॉल के दौरान चर की गणना की जाती है। –

0

मैं पूरी तरह है कि इसका जवाब से सहमत है।

अगर आपके फ्लाई पर वेरिएबल्स बनाते हैं तो आपके फ़ंक्शन पर प्रत्येक कॉल अधिक मेमोरी आवंटित करेगी क्योंकि जावा के जीसी पूरी तरह साफ नहीं हो जाती है जब तक कि कक्षा का निपटान नहीं किया जाता है।

लेकिन यदि आप कई बार फ़ंक्शन को कॉल करने जा रहे हैं तो बस उन्हें वर्ग के सदस्य चर बनाना भी काम करेगा।

0

आप इसके लिए स्थैतिक चर का उपयोग कर सकते हैं, लेकिन यह मानता है कि ये चर स्थिरांक हैं या जो वर्तमान में एक ही फ़ंक्शन को कॉल करने वाले अन्य धागे को बुरी तरह प्रभावित नहीं करते हैं।

यदि आपका कोड पुनर्विक्रेता होना चाहिए और स्थैतिक चर एक विकल्प नहीं हैं, तो आप एक सरल डेटा-धारक ऑब्जेक्ट बना सकते हैं जो इन चरों को रखता है और इसे आपके फ़ंक्शन के लिए तर्क के रूप में पास करता है। आपका कॉलिंग पर्यावरण यह तय कर सकता है कि इन वस्तुओं को साझा करना है या नहीं।

1

स्टेटिक सदस्य वर्र्स, कक्षा को अनलोड किए जाने तक वे अनलोड नहीं होंगे। ध्यान रखें कि यदि कक्षा के सभी संदर्भ खो गए हैं तो यह संभव है कि यह जीसी'एड हो। मुझे संदेह है कि आपके मामले में एक मुद्दा होगा हालांकि यह ध्यान देने योग्य है। इसके अलावा यदि आप स्थिर सदस्यों के वर्ग वाले वर्ग के नए उदाहरण बना रहे हैं तो आप एक ही नाव में आवंटन रुख से होंगे।

0

या तो स्थिर वर्ग फ़ील्ड का उपयोग करें, या यदि आप अपने वर्ग के सामान्य सदस्य चर का केवल एक उदाहरण बनाने जा रहे हैं तो काम करेगा।

यदि आपको स्ट्रिंग की सामग्री को बदलने की आवश्यकता है तो स्ट्रिंगबिल्डर का उपयोग अपरिवर्तनीय स्ट्रिंग उदाहरणों के बजाय किया जाएगा जिसे बनाया जाएगा/gc'ed।

इंट प्राइमेटिव हैं, इसलिए वे कोई समस्या नहीं हैं।

आपकी स्ट्रिंग सरणी ठीक रहेगी, लेकिन आप जो भी डाल रहे हैं उसके बारे में सोचें। क्या आप नई स्ट्रिंग ऑब्जेक्ट्स बना रहे हैं और पुराने लोगों को जीसी दे रहे हैं?

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