मुझे अपने जावा प्रोग्राम में संदर्भ के लिए लाखों एक्स/वाई डबल जोड़े स्टोर करना होगा। मैं मेमोरी खपत को यथासंभव कम से कम ऑब्जेक्ट संदर्भों की संख्या रखना चाहता हूं।जावा क्लास बनाम सरणी मेमोरी आकार?
double[] node = new double[2];
node[0] = x;
node[1] = y;
मैं सरणी का उपयोग कर वर्ग और मेरी एक्स और के बीच की कड़ी रोका जा सके लगा: तो कुछ सोच रहा एक छोटे से डबल सरणी में दो अंक पकड़े एक अच्छा विचार हो सकता है फैसला किया के बाद, यह सेटअप लग रहा है तो तरह है
class Node {
public double x, y;
}
हालांकि जिस तरह से में पढ़ने के बाद कक्षाओं में सार्वजनिक क्षेत्रों जमा हो जाती है, यह मुझ पर लगा कि खेतों वास्तव में संरचनाओं की तरह सूचक के रूप में संरचित नहीं किया जा सकता है, शायद JVM जाता है: इस प्रकार Y चरों, एक वर्ग में इस्तेमाल किया बस इन मानों को संगत स्मृति में संग्रहीत करना और जानता है कि बिना किसी पते के उन्हें कैसे ढूंढें, इस प्रकार मेरे बिंदु के वर्ग का प्रतिनिधित्व करना सरणी से छोटा है।
तो सवाल यह है कि, जिसमें एक छोटी स्मृति पदचिह्न है? और क्यों?
मुझे विशेष रूप से रुचि है कि कक्षा फ़ील्ड एक सूचक का उपयोग करते हैं या नहीं, और इस प्रकार 32-बिट ओवरहेड है, या नहीं।
वर्तमान में मैक ओएस एक्स पर 64 में जावा 1.7 एसई चल अब मैं यह सोचते हैं रहा है कि एक विशाल 2 डी सरणी पूरी तरह से प्रत्येक नोड के लिए आवश्यक वस्तु संदर्भ को खत्म करेगा, इस प्रकार है कि जाने के लिए अब तक का सबसे स्मृति रूढ़िवादी जिस तरह से हो सकता है? –
यदि 2 डी द्वारा आपका मतलब डबल [2] [एन] या डबल [एन] [2] है, जो ऑब्जेक्ट संदर्भों का भी नेतृत्व करेगा। के बाद से जावा में सरणियों सही मायने में इस मामले –
में सरणियों के सरणियों हैं कम से कम स्मृति पदचिह्न एक 1-डी सरणी जहां अनुक्रमित स्पष्ट रूप से गणना होगा (आप * रास्ता * इस overoptimizing, लेकिन ... हैं)। जावा में 2 डी सरणी सिर्फ 1 डी सरणी के पॉइंटर्स की एक सरणी हैं। –