2010-04-06 8 views
5

उठाना पड़ता अगर मैं कोडएक जावा गेटर निष्पादन दंड

int getA(){ 
return a; 
} 

और फिर

int b = obj.getA(); 
बजाय

int b = obj.a; 

की तरह कुछ करना है कि मतलब है कि ढेर अंततः मेरे कोड को धीमा कर धक्का दिया जाएगा और popped होगा?

+1

प्रदर्शन-में-एक-वैक्यूम प्रश्न बेकार हैं। अपने आवेदन में प्रदर्शन-संवेदनशील पट्टी में यह निर्धारित करने के बाद इसे स्वयं प्रोफाइल करें। – djechlin

उत्तर

4

जेआईटी कंपाइलर विधि को रेखांकित करेगा।

कोड

int b = obj.GetA(); 
+0

यह सही नहीं है। एक सी/सी ++ कंपाइलर इस प्रकार के फ़ंक्शन को रेखांकित करेगा लेकिन जावा में आप ऐसा नहीं कर सकते क्योंकि वीएम को पता नहीं है कि फ़ंक्शन का संदर्भ दिया जाएगा या नहीं (एओपी, एस्पेक्टजे आदि का उपयोग करके)। – cletus

+1

@cletus वीएम सभी जावा बाइटकोड निर्देशों का व्याख्या करता है, और इसलिए, इसके बारे में पता है - बाइट-कोड बुनाई उपकरण जैसे कि AspectJ –

+0

@binil, माइकल द्वारा किए गए संशोधनों में भी संशोधन: जब तक गेटटर अंतिम नहीं होता तब तक यह कैसे काम करता है? गेटटर को ओवरराइड करने वाले उप-वर्गों के बारे में क्या? – Thilo

3

की तरह दिखना चाहिए मैं तुम्हारे लिए दो जवाब है:

  1. मुझे नहीं लगता कि चर सीधे तक पहुँचने बनाम गेटर प्रयोग करने के लिए एक महत्वपूर्ण प्रदर्शन दंड नहीं है कि है । इस बारे में और चिंता होगी कि कोड इस तरह के फैसले के प्रदर्शन के मुकाबले कितना समझने योग्य और पठनीय है।
  2. ओओ डिज़ाइन सिद्धांतों के अनुसार, जो आपके लिए महत्वपूर्ण हो सकता है या नहीं भी हो सकता है, आप आमतौर पर डेटा को छिपाते हैं और — तक पहुंचने के लिए गेटर विधि प्रदान करते हैं, इस दृष्टिकोण here के गुणों पर विस्तृत चर्चा है।
+0

दूसरी तरफ, 'get' विधियां अक्सर किसी भी तरह से encapsulation तोड़ती हैं (विशेष रूप से यदि' सेट 'विधि के साथ)। –

1

सैद्धांतिक रूप से एक विधि कॉल किए जाने के कारण सैद्धांतिक रूप से कुछ रनटाइम जुर्माना होता है। हकीकत में, इस दो कारणों से समग्र प्रदर्शन पर बहुत कम प्रभाव पड़ता है:

  1. obj.getA() जब तक अपने कार्यक्रम के आंतरिक सबसे पाश अंदर हो रही है, तो अपने कोड के समग्र प्रदर्शन पर उसके प्रभाव होगा नगण्य होना जब प्रदर्शन एक मुद्दा है तो आपको अपने कोड की बाधा पर विचार करना चाहिए। कोड को अनुकूलित करने में कोई बात नहीं है जो इन हॉट स्पॉट्स पर नहीं है। इन स्पॉट्स को पहचानने के लिए आपको profiler के माध्यम से अपने कोड के निष्पादन का विश्लेषण करने की आवश्यकता है।
  2. जैसा कि @ माइकल कह रहा था कि जेवीएम "जस्ट इन टाइम" कंपाइलर/ऑप्टिमाइज़र का उपयोग करता है जो वास्तविक निष्पादन के आधार पर कोड को रेखांकित करता है। यह इस तरह के अनुकूलन करता है (यह talk देखें)
संबंधित मुद्दे