2012-06-09 11 views
6

जावा में, कैसे महंगा एक डाली करना है यह सोचते हैंएक कास्ट ऑपरेशन Vs i ++ करने के लिए कितना महंगा है?</p> <pre><code>(MyObject) IObject; </code></pre> <p>बनाम:

i++; 

"आई इंट = एन" यह पूर्ववर्ती।

संपादित करें:

उपेक्षा के साथ एक दूसरे के लिए (i ++), अगर आप कृपया होगा मेरे प्रत्यक्ष तुलना। मुझे इसे सामान्य शब्दों में दोबारा दोहराएं: सामान्य रूप से कितना महंगा है? अपने निष्क्रिय ऑपरेशन को अपने बेवकूफ "i ++" उदाहरण से बेहतर चुनें, उदाहरण के लिए एक सरल परिवर्तनीय घोषणा और असाइनमेंट लें, वीएम बाइटकोड/ऑपरेशंस के संदर्भ में कलाकारों की तुलना कैसे करें?

मैंने मापने वाली छड़ी के रूप में i ++ का उपयोग किया। यह एक बहुत बुरा विचार था। जब उन्होंने बेसलाइन के रूप में "मीटर" चुना तो उन्होंने बहुत बेहतर किया। जावा में ऑपरेशन लागत के लिए आधार माप इकाई है? एक जेवीएम सेशन? मुझे लगता है कि यह जावा ऑप को देशी कोड पर निर्भर करेगा ... एन्वाय, कास्टिंग कितना महंगा है? (तुम मेरे लिए मापने छड़ी उठा, मैं उस पर बुरा हूँ)

+6

इन दो परिचालनों के बीच क्या संबंध है? आप इसे ध्वनि बनाते हैं जैसे कि उन्हें इंटरचेंज किया जा सकता है अन्यथा आप उनकी "लागत" की तुलना क्यों करेंगे? – Tudor

+0

क्या? ... आप क्या करने की कोशिश कर रहे हैं? – Brendan

+0

वाह .. -3 कुछ मिनटों में .. हमारे बेहतरीन घंटे नहीं। मैं यह पता लगाने की कोशिश कर रहा हूं कि सामान्य वीएस में एक छोटा सा ऑपरेशन कितना महंगा है। – Robottinosino

उत्तर

1

मैं (कैसे महंगा कास्टिंग है) 2 हिस्से पर एक संक्षिप्त उत्तर करना होगा:

कास्टिंग बहुत सस्ता है और भारी अनुकूलित जहां यह मायने रखता है । if (o instanceof Clazz) ((Clazz)o) बिल्कुल मुफ़्त है (कलाकार, चेक स्वयं नहीं)।

कुल मिलाकर अगर कलाकार को कंपाइलर द्वारा सिद्ध किया जा सकता है और लगातार फोल्ड किया जाता है तो इसका कोई खर्च नहीं होगा। अन्यथा कक्षा निर्धारित करने के लिए ऑब्जेक्ट के शीर्षलेख में एक लोड की आवश्यकता है। कुछ JVM क्लास को स्टोर करने के लिए कुछ पॉइंटर का उपयोग कर सकते हैं, यह कितना महत्वपूर्ण है। वैसे भी, यहां तक ​​कि एक भार भी सस्ता होने की संभावना है और एल 1 कैश मारा जाता है। वस्तुतः सभी कास्ट शाखाओं को हार्डवेयर द्वारा सही ढंग से भविष्यवाणी की जाती है - कल्पना करें कि क्लासकास्ट अपवाद (धीमा पथ - और इस तरह के मामले में अनुकूलन के अनुसार कोई फर्क नहीं पड़ता) की संभावना नहीं है।

Arrays आमतौर पर संग्रह फ़्रेमवर्क और इसके जेनेरिक से कई कारणों से काफी तेज़ होते हैं लेकिन कास्टिंग एक बहुत छोटा हिस्सा निभाता है।

अंतिम: ब्लैटेंट 'माप', यानी माइक्रोबेंमार्क अक्सर एक अचूक विचार है, जो पूरे आवेदन के प्रदर्शन को मापने का सही तरीका है। माइक्रोबेंचमार्क को गहरी समझ की आवश्यकता होती है कि JVM कैसे अनुकूलित करता है (या नहीं) और आपको यह सुनिश्चित करना होगा कि आपको वास्तव में क्या चाहिए इसकी बेंचमार्क करें। Overall it's an art on its own.

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