बस सोच रहा था, -128 और 127 के बीच क्यों?
पूर्णांकों की एक बड़ी श्रृंखला को कैश किया जा सकता है, लेकिन कम से कम -128 और 127 के बीच कैश होना चाहिए क्योंकि यह जावा लैंग्वेज स्पेसिफिकेशन (जोर मेरा) द्वारा अनिवार्य है :
यदि मूल्य p बॉक्सिंग किया जा रहा है तो सही, गलत, एक बाइट, या रेंज में एक char \ u0000 से \ u007f, या -128 और 127 (समावेशी) के बीच एक इंट या शॉर्ट नंबर है , तो r1 और r2 परिणाम दें पी के किसी भी दो मुक्केबाजी रूपांतरण। यह हमेशा ऐसा होता है कि r1 == r2।
इस आवश्यकता के औचित्य को उसी पैराग्राफ में समझाया गया है:
आदर्श रूप से, किसी दिए गए आदिम मूल्य p को बॉक्सिंग करना, हमेशा एक समान संदर्भ देगा । व्यवहार में, मौजूदा कार्यान्वयन तकनीकों का उपयोग करके यह संभव नहीं है। ऊपर दिए गए नियम एक व्यावहारिक समझौता हैं। ऊपर दिए गए अंतिम खंड के लिए आवश्यक है कि कुछ सामान्य मूल्यों को हमेशा अविभाज्य वस्तुओं में रखा जाए। [...]
यह सुनिश्चित करता है कि ज्यादातर सामान्य मामलों में, अनुचित प्रदर्शन दंड लगाए बिना, विशेष रूप से छोटे उपकरणों पर व्यवहार वांछित होगा । उदाहरण के लिए, कम स्मृति-सीमित कार्यान्वयन, सभी चार और लघु मूल्यों को कैश कर सकते हैं, साथ ही -32K से + 32K की सीमा में अंतर और लंबे मूल्य।
मैं इस श्रेणी के बाहर अन्य मूल्यों को कैसे कैश कर सकता हूं।
आप -XX:AutoBoxCacheMax
JVM विकल्प का उपयोग कर सकते हैं , जो वास्तव में उपलब्ध हॉटस्पॉट JVM विकल्प की सूची में प्रलेखित नहीं है । हालांकि यह लाइन 590 के आसपास वर्ग के अंदर टिप्पणियोंInteger
में उल्लिखित है :
कैश का आकार -XX:AutoBoxCacheMax=<size>
विकल्प द्वारा नियंत्रित किया जा सकता है ।
ध्यान दें कि यह विशिष्ट है और अन्य JVM पर उपलब्ध हो सकता है या नहीं।