दिलचस्प पोस्ट
डॉकर में पर्यवेक्षक का उपयोग एडल्टिक्स पर ध्यान केंद्रित करते समय सॉफ्ट-कीबोर्ड कैसे दिखाना नाम-मान संग्रह में एक यूआरआई स्ट्रिंग को पार्स करें Android पर res / values ​​/ public.xml फ़ाइल का क्या उपयोग है? मुझे सबलेट आधारित अनुप्रयोग में जेडीबीसी डाटाबेस / डेटासाईट से कैसे जुड़ना चाहिए? आईओएस 8 के तहत स्थानीय फाइलों को लोड नहीं कर रहा है एकाधिक स्क्रीन आकार का समर्थन करना – एंड्रॉइड Ajax और PHP $ _FILES का उपयोग कर कैनवास तत्वों से चित्र भेजना जावा में पूर्णांक और एक पूर्णांक और सी # के बीच अंतर क्या है? एचटीएमएल फॉर्म केवल पढ़ने का चयन करें टैग / इनपुट एक नया एंड्रॉइड फ्रेगमेंट को शुरू करने के लिए सर्वश्रेष्ठ अभ्यास एंड्रॉइड में एक छवि कैसे फसल करें? मैं स्क्रैच से मानव पठनीय कोणों के साथ रोटेशन मैट्रिक्स कैसे तैयार करूं? दो जावास्क्रिप्ट वस्तुओं के लिए समानता कैसे निर्धारित करें? JSONP अनुरोध त्रुटि हैंडलिंग

जावा में इंटीजर कैशिंग

संभव डुप्लिकेट:
अजीब जावा मुक्केबाजी

हाल ही में मैंने एक प्रस्तुति देखी जहां जावा कोड का निम्नलिखित नमूना था:

Integer a = 1000, b = 1000; System.out.println(a == b); // false Integer c = 100, d = 100; System.out.println(c == d); // true 

अब मैं थोड़ा उलझन में हूँ। मैं समझता हूं कि पहले मामले में परिणाम "झूठा" क्यों है – यह इसलिए है कि पूर्णांक एक संदर्भ प्रकार है और "a" और "b" के संदर्भ अलग हैं।

लेकिन दूसरे मामले में परिणाम "सच" क्यों है?

मैंने एक राय सुना है, कि कुछ अनुकूलन प्रयोजनों के लिए जेएमएम -128 से 127 के लिए इंट वैल्यू के लिए ऑब्जेक्ट को कैशिंग करता है। इस तरह, "c" और "d" के संदर्भ समान हैं

क्या कोई मुझे इस व्यवहार के बारे में अधिक जानकारी दे सकता है? मैं इस अनुकूलन के उद्देश्यों को समझना चाहता हूं। किस मामले में प्रदर्शन बढ़ा है, आदि। इस समस्या के कुछ शोध के संदर्भ में महान होगा।

वेब के समाधान से एकत्रित समाधान "जावा में इंटीजर कैशिंग"

मैं इस अनुकूलन के उद्देश्यों को समझना चाहता हूं। किस मामले में प्रदर्शन बढ़ा है, आदि। इस समस्या के कुछ शोध के संदर्भ में महान होगा।

उद्देश्य मुख्य रूप से स्मृति को बचाने के लिए है, जो बेहतर कैश दक्षता के कारण तेजी से कोड की ओर जाता है।

असल में, Integer क्लास -128 से 127 की श्रेणी में Integer उदाहरणों का कैश रखता है, और सभी ऑटोबॉक्सिंग, लीटरल और Integer.valueOf() का उपयोग उस श्रेणी के कवर के लिए उस कैश से उदाहरण लौटाएंगे।

यह धारणा पर आधारित है कि इन छोटे मूल्यों को अन्य चीजों के मुकाबले अधिक बार देखा जाता है और इसलिए यह प्रत्येक आवेश (एक Integer वस्तु 12 बाइट्स की तरह कुछ लेता है) के लिए विभिन्न ऑब्जेक्ट होने के ओवरहेड से बचने के लिए समझ में आता है।

Integer.valueOf(int) के कार्यान्वयन को देखें। यह 256 से कम इनपुट के लिए समान Integer वस्तु वापस करेगा।

संपादित करें:

यह वास्तव में -128 से +127 डिफ़ॉल्ट रूप से नीचे बताया गया है।