दिलचस्प पोस्ट
ग्राफ़-आधारित डेटाबेस (http://neo4j.org/) के उपयोग के मामलों क्या हैं? पायथन के साथ सेलेनियम वेबड्राइवर परीक्षणों में फ़ायरफ़ॉक्स में छवियों को लोड करना और सीएसएस को नहीं करना चाहिए PHP में `वैश्विक` का उपयोग करना बंद करें जावा दिनांक माह अंतर क्या आंतरिक वर्ग निजी चर का उपयोग कर सकते हैं? त्रुटि 1044 (42000): उपयोगकर्ता '' @ 'लोकलहोस्ट' पर डेटाबेस 'डीबी' के लिए प्रवेश निषेध आर मार्कडाउन को पीडीएफ में बदलने के लिए कैसे? एक्लिप्स सीडीटी इंडेक्सर को सी ++ 11 कंटेनर नहीं पता है JSF / प्राइमफेस AJAX अपडेट्स टूटता है jQuery इवेंट श्रोता फ़ंक्शन बाइंडिंग JFreeChart स्कैटर भूखंडों का उपयोग क्या डेटा सेट के लिए उप-विभाजित शैलियों का एक तरीका है? UIWebView में पाठ बॉक्स टैप करने पर कुंजीपटल दिखाई नहीं दे रहा है .htaccess सभी आईपी के लिए पुनर्निर्देशित लेकिन मेरा है कक्षा में वैश्विक चर का उपयोग करें जेफ्री चार्ट XYPLot में एकल बिंदु का आकार बदलना ActiveRecord Query Union

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

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

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

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" के संदर्भ समान हैं

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

Solutions Collecting From Web of "जावा में इंटीजर कैशिंग"

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

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

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

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

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

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

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