पर एक परमाणु संदर्भ लिख रहा है जावा मेमोरी मॉडल अनिवार्य है कि int
लिखना परमाणु है: यानी, यदि आप इसे एक मान में लिखते हैं (4 बाइट्स से युक्त) एक थ्रेड में लिखते हैं और इसे दूसरे में पढ़ते हैं, तो आप सभी बाइट्स या कोई भी प्राप्त करें, लेकिन कभी भी 2 नए बाइट्स और 2 पुराने बाइट्स या ऐसे नहीं।64 बिट वीएम
यह long
के लिए गारंटी नहीं है। यहां 0x1122334455667788
लिखने वाले चर के लिए 0
लिखने से पहले 0x112233440000000
या 0x0000000055667788
पढ़ने वाले दूसरे थ्रेड में परिणाम हो सकता है।
अब विनिर्देश वस्तु संदर्भों को या तो int या लंबे आकार के होने के लिए जरूरी नहीं है। सुरक्षा कारणों के लिए मुझे संदेह है कि उन्हें परमाणु रूप से लिखा जाने की गारंटी है, लेकिन 64 बिट वीएम पर ये संदर्भ 64 बिट मान (केवल स्मृति पते) के बहुत अच्छे हो सकते हैं।
अब यहाँ मेरे प्रश्न हैं:
- कोई स्मृति मॉडल को कवर यह (है कि मैं नहीं मिला है) चश्मा हैं?
- लंबे समय से लिखने वाले संदिग्ध 64 बिट वीएम पर परमाणु होने के लिए संदिग्ध हैं?
- क्या वीएम को 32 बिट के संदर्भों को मानचित्रित करने के लिए मजबूर किया गया है?
सादर, स्टीफन
@Steffen हील: nitpicking लेकिन ध्यान दें कि सभी संदर्भ (अपशिष्ट 64 बिट संदर्भ पैदा कर रहे हैं की अद्भुत मात्रा के कारण) 64 बिट आंतरिक रूप से भी 64 बिट वी एम पर हैं।आधुनिक वीएम पॉइंटर संपीड़न/संदर्भ संपीड़न का उपयोग कर रहे हैं जिन्हें "संपीड़ित" कहा जाता है *: http://wikis.sun.com/display/HotSpotInternals/CompressedOops इसलिए मैं असहमत नहीं हूं कि वे * 64 बिट मान हो सकते हैं लेकिन वे अक्सर होते हैं 'टी (यह नहीं कि यह डिर्क पोस्ट किए गए उत्तर में बहुत कुछ बदलता है)। – SyntaxT3rr0r