2010-03-15 7 views
9

केवल एक निर्माता के साथ ऑब्जेक्ट बनाने की तुलना में स्मृति और प्रदर्शन उपयोग क्या है?क्या ब्लॉच के बिल्डर पैटर्न का उपयोग करने से कोई स्मृति और प्रदर्शन हिट लिया गया है?

यहां उपयोग Set<Object> या List<Object> बनाने में है जिसमें मिलियन से अधिक प्रविष्टियां हो सकती हैं और मैं ब्लोच बिल्डर पैटर्न का उपयोग करने के ऊपरी हिस्से से चिंतित हूं। मैंने इसे अतीत में उपयोग किया है, लेकिन कभी भी इस दायरे में नहीं।

संदर्भ: Item 2: Consider a builder when faced with many constructor parameters, Creating and Destroying Java Objects: Part 1 में पुनः मुद्रित, जोशुआ ब्लोच द्वारा Effective Java Second Edition से उद्धृत किया गया।

+0

क्या आप ब्लोच बिल्डर पैटर्न के लिए एक लिंक जोड़ सकते हैं? (यानी मूल ब्लोच का वर्णन) – Roman

+0

आप प्रभावी जावा पुस्तक में ब्लोच बिल्डर पैटर्न या @ http://rwhansen.blogspot.com/2007/07/theres-builder-pattern-that-joshua.html – chburd

+0

@chburd: I Google में यह पहला लिंक भी देखा, लेकिन मुझे संदेह है कि यह ब्लोच का मूल वर्णन है। – Roman

उत्तर

7

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

+0

+1 के लिए धन्यवाद, यह निर्माण के लिए एक गैर-तुच्छ परीक्षण है, लेकिन मैं करूँगा। मेरे पास जेएमवी का उपयोग करने के बारे में कोई नियंत्रण नहीं है, इसलिए मैं सामान्यताओं की तलाश में था। – WolfmanDragon

2

अपने शुरुआती विवरण से बताना मुश्किल है, लेकिन यदि आप Collection<Object> को एक निर्माता के लिए एक निर्माता बनाम ~ मिलियन प्रविष्टियों के साथ पास करने के बारे में चिंतित हैं, तो एक अतिरिक्त (अल्पकालिक) वस्तु की लागत पर चर्चा करने योग्य नहीं है ।

+0

मुझे लगता है कि वह बिल्डर-पैटर्न के साथ लाखों वस्तुओं को बनाता है। इसका मतलब है कि लाखों वस्तुओं और अतिरिक्त अस्थायी बिल्डर-ऑब्जेक्ट के लिए। – Mnementh

+0

वह शायद बिल्डर को अपनी सामग्री को खाली करने के लिए प्रत्येक पुनरावृत्ति के लिए एक .clear() विधि या कुछ जोड़ सकता है। –

1

लागत नगण्य है क्योंकि बिल्डर संदर्भ वस्तु के निर्माण के तुरंत बाद कचरा इकट्ठा किया जा सकता है।

अतिरिक्त वस्तुओं के 1 मीटर बनाने का प्रभाव किसी भी परिस्थिति में 10 से नीचे होना चाहिए।

+0

असल में मैं औसत नेटबुक या ऊपरी श्रेणी के स्मार्ट फोन पर भी 1 से कम की अपेक्षा करता हूं। – sfussenegger

+0

@sfusseneger: हाँ, मैंने लूप के लिए एक साधारण में 1 एम ऑब्जेक्ट बनाए और मुझे लगभग 400 एमएस लगे ... मुझे लगता है कि 10 एस सभी मामलों को कवर करना चाहिए लेकिन मैं आपसे सहमत हूं। – OscarRyz

+0

यह शायद एक अच्छा परीक्षण नहीं है क्योंकि यह गर्म करने और अनुकूलित करने के लिए थोड़ी देर के लिए JVM लेता है। अनुकूलित होने पर कोड थोड़ी धीमी गति से चलाएगा। – spierce7

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