2011-12-29 2 views
6

प्रैक्टिस में प्रसिद्ध जावा कंसुरेंसी, सेक्शन 2.4 में, यह कहता है कि आंतरिक लॉकिंग दृष्टिकोण, स्पष्ट ताले के खिलाफ एक खराब डिजाइन निर्णय था क्योंकि यह भ्रमित और "... यह ऑब्जेक्ट आकार और लॉकिंग के बीच व्यापार करने के लिए जेवीएम कार्यान्वयन को मजबूर करता है प्रदर्शन।" क्या कोई व्यक्ति कृपया बता सकता है कि ऑब्जेक्ट आकार प्रभाव प्रदर्शन को लॉक कर रहा है?ऑब्जेक्ट आकार और लॉकिंग प्रदर्शन जावा के बीच कोई संबंध है?

+1

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

+0

@ होट्लिक्स जो मुझे आश्चर्यचकित करता है, आकार shudnt कोई अतिरिक्त ओवरहेड है, धन्यवाद! – meer

उत्तर

5

ठीक है क्योंकि प्रत्येक ऑब्जेक्ट को लॉक किया जा सकता है, इसका मतलब यह है कि लॉक होने पर हमें आवश्यक सभी जानकारी को स्टोर करने के लिए प्रत्येक ऑब्जेक्ट में पर्याप्त स्थान होना चाहिए।

यह अपेक्षाकृत अपरिहार्य है क्योंकि विशाल, विशाल बहुसंख्यक वस्तुओं को कभी भी बंद नहीं किया जाएगा, इसलिए हम बहुत सारी जगह बर्बाद कर रहे हैं। तो अभ्यास में हॉटस्पॉट ऑब्जेक्ट की स्थिति रिकॉर्ड करने और इन दो बिट्स के आधार पर शेष ऑब्जेक्ट हेडर का पुन: उपयोग करने के लिए 2 बिट्स का उपयोग कर हल करता है।

फिर पूरी पक्षपातपूर्ण/गैर-पक्षपातपूर्ण लॉकिंग सामग्री है .. ठीक है आप इसके बारे में here पढ़ना शुरू कर सकते हैं। हॉटस्पॉट प्रलेखन वह नहीं है जिसे मैं व्यापक रूप से कॉल करता हूं, लेकिन लॉकिंग और ऑब्जेक्ट हेडर अधिकांश बाकी हिस्सों की तुलना में बेहतर प्रतिनिधित्व करते हैं। लेकिन संदेह में: स्रोत कोड पढ़ें।

पीएस: हमें हर ऑब्जेक्ट के मूल हैशकोड के साथ भी एक ही समस्या है। "बस मेमोरी एड्रेस का उपयोग करें" यदि आपका जीसी शफ़ल करता है तो बहुत अच्छा नहीं है। (लेकिन लॉक करने के विपरीत कोई वास्तविक विकल्प नहीं है - अगर हम यह कार्यक्षमता चाहते हैं)

+0

जानकारी के लिए धन्यवाद, मूल रूप से इसके सभी प्राचीन सिंक्रनाइज़ेशन के बारे में, – meer

+0

लॉक करने के लिए उपयोग की जाने वाली विशेष वस्तु के आकार के बावजूद क्या आपको उन बयानों के साथ जाने के लिए कुछ विशिष्टताएं मिली हैं? "बहुत सा स्थान? लॉक करते समय किस जानकारी की आवश्यकता है? – Toby

+0

@Toby अच्छी तरह से कम से कम टीआईडी ​​और एक रिकर्सन काउंटर। विवरण के लिए आपको हॉटस्पॉट स्रोत में भारी लॉक कक्षाओं को देखना होगा। यह ध्यान में रखते हुए कि यह प्रत्येक ऑब्जेक्ट में जोड़ा गया है, फिर भी 1-2 शब्द "बहुत सारी जगह" हैं। – Voo

2

सबसे कुशल ताले देशी शब्द आकार का उपयोग करते हैं उदा। 32-बिट फ़ील्ड। हालांकि आप प्रत्येक ऑब्जेक्ट में 4 बाइट्स जोड़ना नहीं चाहते हैं, इसलिए AFAIK 1 बिट का उपयोग किया जाता है, हालांकि इस बिट को सेट करना अधिक महंगा है जो शब्द का आकार निर्धारित करता है।

+0

हम्म हम सीएएस के बिना ऐसा कर सकते हैं भले ही हम शब्द के आकार वाले फ़ील्ड का उपयोग करें? यदि नहीं, तो यह मूल रूप से केवल + बिट शफलिंग + सीएएस बनाम सीएएस पढ़ता है - शायद वह बुरा नहीं है, लेकिन अभी भी धीमा है। – Voo

+0

@Voo मेरे अनुभव में खराब नहीं है क्योंकि 'सिंक्रनाइज़' के रूप में जेआईटी द्वारा अनुकूलित किया जा सकता है, लॉक नहीं है। –

+0

मैं सिंक्रनाइज़ कार्यान्वयन के बारे में बात कर रहा हूं। भले ही हम एक शब्दकोष लॉकिंग हेडर का इस्तेमाल करते हैं, फिर भी हमें एक सीएएस की आवश्यकता होगी जो थोड़ा शफल करने पर हावी हो, इसलिए वहां बहुत अंतर नहीं है। हम शायद एक दूसरे के पीछे बात कर रहे हैं। – Voo

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