नीचे, परमाणु इंटेगर और परमाणु इंटेगरएरे आमतौर पर पढ़ने, लिखने और अन्य सीएएस संचालन करने के लिए समान निम्न स्तर एपीआई का उपयोग करते हैं। (उदाहरण के लिए, ओपनएसडीके 7 दोनों वर्गों में सीएएस संचालन करने के लिए sun.misc.Unsafe
का उपयोग करता है।) इसलिए परमाणु इंटेगर [] का उपयोग करने में थोड़ा प्रदर्शन लाभ होता है। जैसा कि आपने पहले ही उल्लेख किया है, परमाणु इंटेगरएरे का उपयोग में महत्वपूर्ण स्मृति फायदे हैं।
एक व्यावहारिक नोट पर, बाद में उपयोग आपको अपने सभी परमाणु इंटेगर उदाहरणों को बनाने से मुक्त करता है। याद रखें कि आप सहमति के कारणों से उन लोगों को आलसी रूप से आवंटित नहीं कर सकते हैं; आपको कुछ सुरक्षित प्रकाशन तंत्र को पूर्व-आवंटित या उपयोग करना होगा। तो स्मृति फायदे के अलावा, आपका कोड क्लीनर है।
एक समान नस पर, आप AtomicInteger सदस्यों के साथ वस्तुओं का एक समूह, उदाहरण के लिए, यदि:
class ReadCounter {
private final String _fileName;
private final AtomicInteger _readCount;
...
}
private final Map<String, ReadCounter> _counterByName = ...;
तो फिर तुम एक volatile int
के रूप में सदस्य चर _readCount
मॉडलिंग और AtomicIntegerFieldUpdater
का उपयोग करके समान स्मृति सुधार प्राप्त कर सकते हैं।
स्रोत
2009-03-28 16:39:29
सीमा शुल्क के बारे में कौन परवाह करता है? यदि आप (स्पष्ट) स्रोत कोड को देखते हैं, तो कहें, प्राप्त करें और प्राप्त करें यह प्राप्त करने और तुलना करने के लिए पता गणना करता है और तुलना करें (हालांकि इससे भी बदतर, अधिकांश प्रोसेसर बिना किसी कैस के सेट-एंड-सेट कर सकते हैं)। –
tnx (वहां आपका दूसरा पैराग्राफ नहीं देखा गया) तो यह अच्छा हो सकता है कि सभी ऑब्जेक्ट्स एक ही समय में न बनाएं? (या कुछ यादृच्छिक क्रम के साथ?) – Sarmun
(मैंने एक त्वरित संपादन किया था।) विभिन्न समय पर ऑब्जेक्ट्स बनाना, जीसी को पुनर्व्यवस्थित करने में मदद नहीं करेगा। Java.util.concurrent में कक्षाओं में से एक जहां तक बहुत सारे पैडिंग (हाल के संस्करणों में) जोड़ने के लिए जाता है। यह परमाणु इंटेगरएरे में पैडिंग तत्व जोड़ने के लिए आसान और स्पष्ट होना चाहिए, बस बाएं स्थानांतरित करें। –