2010-01-11 12 views
8

संभावना एक गूंगा सवाल लेकिन ..जावा स्मृति दिशानिर्देश

वहाँ कितनी स्मृति बुनियादी जावा डेटा संरचनाओं की खपत होगी के लिए किसी भी अच्छे मार्गनिर्देश हैं?

आईई: एक इंट सदस्य और String सदस्य के साथ एक साधारण POJO द्वारा कितनी मेमोरी खाई जाएगी (कहें कि इसमें 10 चार स्ट्रिंग हैं)? कहा गया वस्तुओं में से List द्वारा कितनी मेमोरी खाई जाएगी?

आदि

+2

एसओ पर बेवकूफ सवाल पूछे गए हैं, लेकिन आपका उनमें से एक नहीं है। :-) – JesperE

उत्तर

0

मैं स्ट्रिंग के लिए 144 बिट कहेंगे (10 पात्रों के लिए सूचक के लिए 32, 80, 32 लंबाई int के लिए), int के लिए 32 बिट्स, और पॉइंटर के लिए 32 ऑब्जेक्ट के लिए, 208 बिट्स बनाते हैं। 10 की एक सूची में ऑब्जेक्ट्स और पॉइंटर्स के लिए 2080 बिट्स की आवश्यकता होगी, अगले और पिछले पॉइंटर्स के लिए अतिरिक्त 32 * 2 * 10, सूची की लंबाई के लिए 32 और पॉइंटर के लिए 32। यह 2784 बिट्स कुल बनाता है। और जावा बनाम मेरे अनुभव में मुझे लगता है कि इसे (उर्फ सी) की आवश्यकता होगी, आप एक बार दो गुणक लागू करते हैं, जिससे इसे 5568 बिट बनाते हैं।

दिन के अंत में यदि आप स्मृति आवश्यकताओं के बारे में चिंतित हैं, तो इसका परीक्षण करें और देखें! लेकिन ऐसी छोटी संख्याओं के लिए परीक्षण करना काफी कठिन है ... इसके बजाय उनमें से कुछ हज़ारों को आजमाएं।

+1

64 बिट वीएम पॉइंटर्स पर 64 बिट हो सकता है - और 10 वर्ण 160 बिट्स हैं, क्योंकि जावा चार एक 16 बिट प्रकार है (जो शायद सी के मुकाबले आपके अनुभव के लिए खाता है)। –

+0

उनमें से दोनों अच्छे बिंदु :) जावा क्षेत्रों को बेंच किए गए मुख्य क्षेत्रों में डेटा संरचनाएं हैं, जहां यह int की बजाय इंटीजर का उपयोग कर रहा था, जिसे मैंने अनुमान लगाया था, जहां x2 मामले में आया था। – ZoFreX

+0

माइकल: हालांकि यह वीएम विनिर्देशन द्वारा अनिवार्य नहीं है, कि स्ट्रिंग्स को स्मृति में यूटीएफ 16-एन्कोडेड रखा जाता है। रनटाइम दक्षता के बजाय मेमोरी पदचिह्न के लिए अनुकूलित करना, एक स्ट्रिंग कार्यान्वयन भी चरित्र डेटा यूटीएफ 8-आंतरिक रूप से एन्कोड किया जा सकता है या किसी अन्य एन्कोडिंग का उपयोग कर सकता है। – jarnbjo

0

Gary Sevitsky आईबीएम रिसर्च ने जावा कार्यक्रमों में मेमोरी ब्लोट का विश्लेषण और नियंत्रण करने पर कई कागजात लिखे हैं। his publication list का हालिया आधा आपकी पूछताछ के लिए प्रासंगिक दिखता है।

मैंने इस विषय पर a tutorial of his at OOPSLA 2008 में भाग लिया और इसे जावा के इस डरावनी, अधिकतर पहचाने पहलू के लिए एक अच्छा परिचय मिला।

1

स्ट्रिंग्स कुख्यात रूप से मुश्किल हैं क्योंकि वे नीचे एक वर्ण सरणी पर हैं जो अन्य स्ट्रिंग ऑब्जेक्ट्स के साथ साझा की जाती है जो मूल स्ट्रिंग ऑब्जेक्ट के सबस्ट्रिंग्स हैं।

संबंधित मुद्दे