Thursday 15 April 2010

java - How JIT schedule the execution of byte code? -


कहो, हमारे पास कोड है:

  टेस्ट टी = नया टेस्ट ();   

बाइट कोड में संकलित करें यह वास्तव में तीन चरण होगा:

  1। Mem = allocateMem (): मेमोरी आवंटन के लिए टेस्ट करें और इसका पता बचाएं। 2. निर्माण (मेम): कक्षा टेस्ट तैयार करें 3. t = mem: mem to point t   

यहां मुझे आश्चर्य है, अगर निर्माण (मेम) बहुत धीमा है, तो जीआईटी इंतजार करेगी चरण 2 जब तक मे पूरी तरह संचरित नहीं हो जाता है?

यदि यह इंतजार नहीं करता है (एएसआईएनसीसी)

तो यह कैसे गारंटी दे सकता है कि मैम पूरी तरह से उपयोग करने से पहले (एकल धागा) का निर्माण कर रहा है?

यदि यह प्रतीक्षा करता है (सिंक)

तब क्यों डबल चेक लॉक (नीचे दिए गए कोड को देखें और यह) विफल हो जाता है?

  वर्ग डीबी {निजी डीबी () {} निजी स्थिर डीबी उदाहरण; सार्वजनिक स्थैतिक डीबी प्राप्त इंस्टेंस () {// पहले जांचें अगर (उदाहरण == नल) {सिंक्रनाइज़ (डीबी। क्लास) {// दूसरा जांच अगर (उदाहरण == शून्य) {उदाहरण = नया उदाहरण (); }}} उदाहरण वापसी; }}   

मैं बताता हूं कि उपर्युक्त कोड एक ऐसा विवरण वापस करेगा जो पूरी तरह से निर्मित नहीं हुआ है।

निर्माण (मेम) बहुत धीमा है, तो जेएटी चरण 2 में जब तक mem < / कोड> पूरी तरह से निर्मित है?

यह सोचें कि आप जेआईटी द्वारा उत्पन्न कोड के बारे में बात कर रहे हैं ... तो जवाब यह है कि कोड जरूरी नहीं उस बिंदु पर प्रतीक्षा करें यह निर्भर करता है कि के बाद चरण 3।

फिर यह कैसे सुनिश्चित कर सकता है कि mem उपयोग करने से पहले पूरी तरह से बनाया गया है (एकल सूत्र)?

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

तो "संक्षिप्त उत्तर क्या यह सुनिश्चित करता है ", यह है कि यह उन आदेशों के आदेशों को निकालने से करता है जो वास्तविक भाषा आवश्यकताओं को संतुष्ट करता है ... अधिक प्रतिबंधात्मक शब्दार्थ है जो आपने ज़ाहिर किया है।


मैं अपने प्रश्न के दूसरे भाग (डीसीएल कार्यान्वयन के बारे में) के बारे में विवाद कर रहा हूँ।


1 - यह केवल उस धागे पर लागू होता है । जेएलएस कहता है कि अन्य धागे के संबंध में निरंतरता के लिए ऐसी कोई आवश्यकता नहीं है ... जब तक कि लेखन और बाद में पढ़े जाने वाले घटना के बीच "पहले-पहले" संबंध नहीं है।

No comments:

Post a Comment