2009-02-11 16 views
7

सी में, मैं एक चर के लिए एक रजिस्टर आवंटित कर सकते हैं, उदाहरण के लिए:जावा int रजिस्टर के बराबर है?

register int i = 0; 

मैं वाकिफ हूँ कि जावा एक व्याख्या की भाषा है, और सीपीयू से कई कई कपोल-कल्पना है।

क्या अनुरोध करने के लिए कोई तंत्र उपलब्ध है (और यदि आर्किटेक्चर इसे अनुमति नहीं देता है, तो क्या) कि मेरा चर कैश या मुख्य मेमोरी में जाने के बजाए एक रजिस्टर में रहता है?

मुझे नहीं लगता कि कोई रास्ता है, लेकिन मुझे पहले सुखद आश्चर्य हुआ है।

धन्यवाद,

+1

सी में "रजिस्टर" पूरी तरह से बेकार है, और कम से कम एक दशक तक रहा है। अनुकूलक संकेतों की आवश्यकता नहीं है। –

+0

"व्याख्या की गई भाषा"। इंटरप्रेटर भाषा प्रणाली की एक संपत्ति है, न कि भाषा। अधिकांश (कुछ उपयुक्त परिभाषा के लिए) जावा निष्पादित संकलित है। –

उत्तर

3

नहीं, जावा में इसका अनुरोध करने का कोई तरीका नहीं है। हालांकि, ऐसी कुछ चीजें हैं जो आप कर सकते हैं जो एक रजिस्टर को रोकने से रोकेंगी, जैसे सदस्य चर के लिए volatile संशोधक लागू करना।

+0

रजिस्टर केवल स्थानीय चर (या पैरामीटर) पर लागू होगा। जावा की अस्थिरता या तो लागू नहीं है। आईआईआरसी, वास्तव में कौन सा रजिस्टर यह एक चर को संदर्भित करने से रोकता है, जो जावा वैसे भी नहीं करता है। –

+0

क्या HotSpot कभी भी एक सदस्य में एक सदस्य चर का मूल्य कैश करता है? मैंने सोचा कि, 'अस्थिर' की आवश्यकता थी, कुछ हद तक, यह सुनिश्चित करने के लिए कि एक रजिस्टर में एक (ए की प्रति) मूल्य में परिवर्तन मुख्य स्मृति में धकेल दिए गए थे। – erickson

+1

अस्थिर केवल गारंटी देता है कि सभी थ्रेड नवीनतम संस्करण देखेंगे। इस बात की कोई गारंटी नहीं है कि इसे एक रजिस्टर में लोड नहीं किया जाएगा। वह थ्रेड दृश्यता पूरी तरह से JVM तक छोड़ी गई है। –

18

सी में register एक चर रजिस्टर करने के लिए डाल नहीं है। यह बस संकलक को इशारा देता है, कि शायद इसे एक रजिस्टर में रखना अच्छा होगा।

जावा में कोई समकक्ष नहीं है।

6

यदि यह एक छोटी सी जगह में पर्याप्त रूप से उपयोग किया जाता है जो इसे एक रजिस्टर int बनाता है तो सार्थक होगा, तो हॉटस्पॉट कंपाइलर स्वयं को समझने में सक्षम होना चाहिए।

वास्तव में, हॉटस्पॉट कंपाइलर सी/सी ++ कंपाइलर की तुलना में बेहतर काम करने में सक्षम होना चाहिए, क्योंकि इसमें काम करने के लिए अधिक जानकारी है। सी/सी ++ कंपाइलर्स को अनुमान लगाना है; हॉटस्पॉट उपाय कर सकते हैं।

5

जावा में कोई समकक्ष नहीं है। यहां तक ​​कि सी में भी कोई गारंटी नहीं है कि चर एक रजिस्टर में संग्रहीत किया जाएगा और कंपाइलर्स इसे अनदेखा करने के लिए स्वतंत्र हैं।

जावा में, विधि को तब तक व्याख्या किया जाएगा जब तक हॉटस्पॉट जेआईटी स्वस्थ रूप से निर्धारित नहीं करता है कि इसे संकलित करने की आवश्यकता है। संकलित कोड के लिए यह रजिस्टरों को चर और अस्थायी मान असाइन करने के लिए रंगीन एल्गोरिदम का उपयोग करता है, या रजिस्टर ओवरफ़्लो के मामले में रैम से/लिखता है।

3

मुझे पता है कि जावा एक व्याख्या भाषा है, और सीपीयू से कई कई कपोल-कल्पना की दूरी पर है हूँ।

आप काफी वहाँ अपना स्वयं का प्रश्न :-)

लेकिन गंभीरता से, सामान्य रूप में उत्तर दिया, अपने कोड के रूप में स्पष्ट रूप से और आसानी से आप कर सकते हैं के रूप में लिखते हैं, और JVM क्या यह कर सकते हैं अपने कोड के इलाज के लिए क्या करेंगे सही।

0

आप @register नामक एक एनोटेशन बना सकते हैं लेकिन JVM निश्चित रूप से इसे अनदेखा कर देगा। उदा।

@register int i = 0; 
संबंधित मुद्दे