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