2011-06-03 13 views
16

जेनेरिक जावा 5 में जावा में रहे हैं। जावा एप्लिकेशन में जेनेरिक का उपयोग करने के प्रदर्शन प्रभाव क्या हैं और क्या आप उनके प्रदर्शन प्रभाव के कारणों की व्याख्या कर सकते हैं?जावा प्रभाव प्रदर्शन में जेनेरिक का उपयोग करता है?

+0

क्या तुलना में प्रदर्शन प्रभावित करते हैं? – Arne

उत्तर

18

जेनेरिक्स एक संकलन समय की सुविधा है। आपके आवेदन को चलाने पर इसका कोई प्रभाव नहीं पड़ता है।

अधिकांश प्रदर्शन प्रश्नों की तरह; स्पष्ट और सरल कोड लिखना कहीं अधिक महत्वपूर्ण है और यह अक्सर बहुत अच्छा प्रदर्शन देता है।

प्रदर्शन कारणों से आपके डिज़ाइन को बदलना अक्सर एक गलती है कि कुछ लोग कहते हैं कि आपको कभी ऐसा नहीं करना चाहिए। मुझे लगता है कि शुरू करने से पहले प्रदर्शन पर विचार करना उचित है लेकिन आपको पहचानना होगा कि आपके पास अपेक्षाकृत मामूली प्रदर्शन प्रश्न कब है।

आप अपने कोड को लिखने और बाद में इसे अनुकूलित करने से बेहतर हैं जब आप बेहतर तरीके से समझते हैं कि आप कैसे व्यवहार करते हैं। यानी जब आप वास्तविक उपयोग के मामले और प्रोफाइलर हैं।

10

क्या यह किसी एप्लिकेशन के प्रदर्शन को प्रभावित करता है और कैसे?

नहीं, यह प्रदर्शन को प्रभावित नहीं करेगा यह रनटाइम पर भी वहां नहीं है के बाद से।

आधिकारिक निशान से:

जब एक सामान्य प्रकार instantiated है, संकलक नामक तकनीक प्रकार विलोपन से उन प्रकार अनुवाद करता है - एक ऐसी प्रक्रिया जिसके संकलक संबंधित सभी जानकारी मापदंडों टाइप करें और तर्क टाइप करने के लिए निकालता है एक वर्ग या विधि के भीतर।


मैं here दोनों इन कार्यक्रमों बहुत ही बाईटकोड से अनुवाद सचित्र किया है:

import java.util.*; 

class Test { 
    public static void main(String[] args) { 
     List<String> l = new ArrayList<String>(); 
     l.add("hello"); 
     System.out.println(l.get(0).length()); 
    } 
} 

 

import java.util.*; 

class Test2 { 
    public static void main(String[] args) { 
     List l = new ArrayList(); 
     l.add("hello"); 
     System.out.println(((String) l.get(0)).length()); 
    } 
} 
+7

@downvoter, डाउनवोट क्यों? कृपया जस्टिफ़ाई करें। –

+3

यह सुनिश्चित नहीं है कि वे क्यों कम हो गए, लेकिन मैं कल्पना कर सकता हूं कि कुछ लोग (जैसे मेरे) आपकी व्याख्या के साथ सहमत नहीं होंगे। प्रदर्शन के लिए आपको तुलना करना चाहिए एक MyClass है और इसे टी = स्ट्रिंग के साथ शुरू करें, और जेनिक्स के बिना MyClass का प्रत्यक्ष कार्यान्वयन। यह प्रदर्शन में मायने रखता है। आम तौर पर ज्यादा नहीं, लेकिन जब आप उन्हें एल्गोरिदम के आंतरिक पाश में रखते हैं, तो यह आसानी से 50% प्रदर्शन हानि को छोड़ सकता है, जैसा कि इस सरल उदाहरण में देखा जा सकता है: http://pastebin.com/QeCW0W1R (मुझे पता है कि यह है खराब प्रोफाइलिंग, लेकिन परीक्षण आदेश के साथ इसे 5 बार और फिर 5 बार करें, यह हमेशा वही होता है) – user1111929

3

जेनरिक रनटाइम प्रदर्शन को प्रभावित नहीं करते हैं। हालांकि, वे आपके विकास प्रदर्शन को सकारात्मक रूप से प्रभावित कर सकते हैं। जेनेरिक के लिए धन्यवाद, आप संकलन समय के दौरान अतिरिक्त चेक प्राप्त करते हैं, इसलिए आप कुछ त्रुटियों को तेज़ी से पहचानने में सक्षम हैं।

6

हां, यह प्रदर्शन को प्रभावित करता है क्योंकि संकलक टाइप-कास्ट बनाता है।

उदाहरण के लिए:

List<String> strings = ... 
String first = strings.get(0); 

हो जाएगा:

List strings; 
String first = (String)string.get(0); 

बहरहाल, यह वास्तव में बात नहीं क्योंकि इससे पहले कि जावा जेनरिक था इस एक ही तरह से हल किया गया था नहीं है। जावा जेनरिक में केवल संकलन समय पर टाइप सुरक्षा सुनिश्चित करें।

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