सी malloc
कार्यान्वयन आमतौर पर अनुरोध की गई स्मृति की सटीक मात्रा आवंटित नहीं करते हैं बल्कि इसके बजाय स्मृति के निश्चित आकार के रनों का उपयोग करते हैं, उदा। दो आकारों के साथ, ताकि 1025 बाइट्स का आवंटन वास्तव में ढलान के रूप में खोए गए 1023 बाइट के साथ 2048-बाइट सेगमेंट लेता है।जावा सरणी हॉटस्पॉट में कितनी सटीक स्मृति का उपयोग करती है (यानी कितनी ढलान)?
क्या हॉटस्पॉट जावा सरणी के लिए समान आवंटन तंत्र का उपयोग करता है? यदि हां, तो जावा सरणी आवंटित करने का सही तरीका क्या है कि कोई ढलान न हो? (जैसे सरणी लंबाई दो या दो शक्तियों की शक्ति हो सकती है, कुछ निश्चित मात्रा में ओवरहेड?)
के आप एक सरणी की जरूरत है 1025 बाइट्स स्टोर करने के लिए मान लेते हैं। आइए मान लें कि जावा उस सरणी के लिए 2048 बाइट्स मेमोरी आवंटित करता है, जिससे 1023 बाइट अप्रयुक्त होते हैं। 1025 बाइट्स स्टोर करने के लिए 2048 बाइट्स की सरणी बनाने में आपको क्या फायदा होगा? अब आपको अप्रयुक्त 1023 बाइट्स को स्वयं को संभालना होगा, और कहीं भी सरणी की वास्तविक लंबाई को स्टोर करना होगा, और जेवीएम को आपके लिए यह करने की बजाय, सरणी को पार करने के बजाय इसे तर्क के रूप में पास करना होगा। और खपत स्मृति की मात्रा वही होगी। यह एक ब्रेनर है। एक सरणी आवंटित करने का सही तरीका एक सरणी आवंटित करना है जिसकी आपको आवश्यकता है। –
ईमानदारी से, मैं इस बारे में चिंता नहीं करता कि कैसे एक JVM कार्यान्वयन स्मृति को संभालता है। जावा जैसी प्रबंधित भाषा का उपयोग करने की खुशी यह है कि स्मृति केवल एक विशाल सरणी नहीं है, आपको बफर ओवररन्स या मेमोरी भ्रष्टाचार के बारे में चिंता करने की ज़रूरत नहीं है, बाहर की समस्याओं या रास्ते के पॉइंटर्स से, और आपको (लगभग) कभी आवश्यकता नहीं है वस्तु साफ करने के बारे में चिंता करने के लिए। जावा के ज़ेन में खुद को खोलें। – scottb
'मॉलोक 'में बाधाओं का एक गुच्छा है कचरा-एकत्रित भाषा को चिंता करने की ज़रूरत नहीं है। मुझे लगता है कि जावा को उन चीजों के बारे में चिंता करने की ज़रूरत नहीं है। –