2010-07-09 12 views
11

मैं एक और डेवलपर से सुन रहा हूं कि एक वस्तु बार-बार तत्काल करने के लिए बहुत महंगा है क्योंकि "इसमें विधियों का एक समूह है।"जावा में ऑब्जेक्ट त्वरण के लिए प्रति-विधि लागत है?

मेरी समझ (ज्यादातर ब्लोच से) यह थी कि ऑब्जेक्ट सृजन ज्यादातर कन्स्ट्रक्टर में स्पष्ट रूप से किए गए कार्यों के माध्यम से महंगा है, विशेष रूप से अन्य महंगी वस्तुओं का निर्माण करना।

जावा में किसी नई ऑब्जेक्ट के लिए प्रति-विधि लागत है? मैं नहीं सोच रहा हूं, लेकिन अगर किसी के पास है तो मुझे संदर्भों की आवश्यकता है।

धन्यवाद!

+3

मैं एक वर्ग बनाने का सुझाव देता हूं जिसमें कोई तरीका नहीं है और दूसरा एक जिसमें 100 विधियां हैं, फिर समय-समय पर प्रत्येक को एक लाख बार या तुरंत चालू करने में कितना समय लगता है। फिर यह सुनिश्चित करने के लिए कई बार ऐसा करें। (मेरा घुटने-झटके का जवाब यह होगा कि नहीं, विधियां कोई फर्क नहीं पड़ती हैं। लेकिन इसके लिए मेरा शब्द न लें।) –

+0

मुझे इस तरह की चीज़ के लिए कुछ समय परीक्षक बनाने की जरूरत है। क्या वहां कोई भी पहले से बाहर है? एक और एसओ सवाल .... – orbfish

उत्तर

11

कई विधियों का अर्थ है virtual method table (VMT)। हालांकि, वीएमटी प्रति वर्ग मेटाडेटा की तरह प्रति वर्ग है और इसलिए केवल पहली बार तत्काल तत्कालता पर केवल एक बार की लागत होती है। बाद के तात्कालिकता कम विधियों वाले ऑब्जेक्ट्स जितनी तेज होती है, यह मानते हुए कि कन्स्ट्रक्टर भारी भारोत्तोलन नहीं करते हैं।

पढ़ने के लायक भी object creation from the performance tuning book पर अध्याय है।

+2

* "... केवल पहली बार तत्काल तत्कालता पर एक बार की लागत है" *। असल में, लागत लोडिंग समय पर खर्च किया जाता है। –

+0

उत्तर के लिए धन्यवाद। पुस्तक थोड़ी देर से दिखती है, लेकिन मैं एक नज़र डाल रहा हूं। – orbfish

+0

@ स्टीफन सी, जो वीएम पर निर्भर करता है और जेआईटी कैसे काम करता है। यही कारण है कि मैंने "सबसे अधिक" लिखा - यह कक्षाओं को आलसी रूप से लोड कर सकता है, और कक्षा को देर से लोड किया जा सकता है, मूल रूप से उनके तत्कालता से ट्रिगर किया जाता है। – Lucero

3

नहीं, कक्षा में विधियों की संख्या और new ऑपरेशन करने के लिए JVM के समय के बीच कोई संबंध नहीं है।

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

सच्चाई यह है कि आपको अपने एल्गोरिदम और डेटा संरचनाओं के डिजाइन पर ध्यान देना चाहिए, इससे आपके संभावित प्रदर्शन के मुकाबले आपके अनुप्रयोग प्रदर्शन पर अधिक गहरा असर होगा।

+2

+1 हाइलाइट करने के लिए +1 कि यदि आपको लगता है कि ऑब्जेक्ट सृजन प्रदर्शन एक मुद्दा है तो आपको जावा का उपयोग नहीं करना चाहिए ... –

+3

यदि आप मेरा प्रश्न सावधानी से पढ़ते हैं, तो आप देखेंगे कि मैं "इस स्तर पर सोचने वाला" नहीं हूं - मैं एक अच्छा डिजाइन बनाने की कोशिश कर रहा हूं, लेकिन निराधार दावों के आधार पर प्रतिरोध में भाग रहा हूं। अपमान की सराहना नहीं की। – orbfish

+1

@inflagranti FYI पहले संदर्भित पुस्तक में और प्रभावी जावा में भी इसका पूरा अध्याय है। मैं आपको लेखकों को बताने दूंगा कि उन्हें जावा का उपयोग नहीं करना चाहिए;) – orbfish

1

एक तरफ के रूप में, कई उदाहरण चर के साथ एक वर्ग के लिए थोड़ा सा प्रदर्शन मारा जाएगा (सुनिश्चित नहीं है कि यह वास्तव में मापने योग्य होगा)। जावा को प्रत्येक इंस्टेंस वैरिएबल को प्रत्येक नए इंस्टेंस के लिए 0, झूठी, शून्य पर सेट करने की आवश्यकता होती है और शून्य पर सेट करने के साथ जुड़े रनटाइम लागत होती है। हालांकि यह शायद सिर्फ एक यादृच्छिक (या कॉलोक या ऐसा कुछ) है जो पूरा करने के लिए तेज़ है।

0

यदि किसी के पास है तो मुझे संदर्भों की आवश्यकता है।

मेरा सुझाव है कि यह अन्य डेवलपर जो संदर्भ उसके ऊटपटांग दावे के समर्थन में के लिए कहा जाना चाहिए।

+0

मैंने अभी यहां शुरुआत की है। शायद समय में .... – orbfish

+1

बस गूंगा खेलें। कहो 'सच में? ऐसा कहां कहा गया है? यह कैसे काम कर सकता है? ऑब्जेक्ट तत्काल समय पर अतिरिक्त विधि का अधिक खर्च क्यों होगा? ' – EJP

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