2012-06-22 7 views
5

पॉइंट (एक्स, वाई) ऑब्जेक्ट के सामान्य उदाहरण का उपयोग करना, जावा 1.4 में एक स्ट्रक्चर के रूप में रखने का कोई तरीका है? लाभ यह होगा कि प्वाइंट ऑब्जेक्ट के लिए एक अलग स्मृति आवंटन नहीं होगा क्योंकि संरचना युक्त वस्तु का हिस्सा होगा। लेकिन इसका उपयोग करने के लिए अभी भी सदस्य कार्य होंगे।क्या जावा 1.4 में संरचना के समतुल्य होने का कोई तरीका है?

मैं 98% कुछ जवाब परन्तु अनन्त आशा स्प्रिंग्स नहीं है हूँ ...

क्या/क्यों: हमारे कोड में हम 100,000+ वस्तुओं है (लगभग 12 - कुल स्मृति पदचिह्न का 14%) वह एक int और एक बुलियन है। यदि वह वस्तु के अंदर एक सी # संरचना थी, तो यह वस्तुओं की संख्या को कम कर देगा। और ... हम इसे सिर्फ एक int बनाने के लिए देख रहे हैं जहां 0x40000000 बूलियन मान है। लेकिन अगर हम उस int के लिए सदस्य विधियां हैं और इसे एक संरचना के रूप में माना जाता है तो इसे संभालना बहुत आसान है।

+0

मेमोरी आवंटन के बारे में चिंतित हों ... क्या आपका मतलब है "नया" का उपयोग करना? –

+1

क्या आप कुछ नमूना कोड प्रदान कर सकते हैं जो वर्णन करता है कि वास्तव में जावा "संरचना" क्या है? –

+0

क्या आपका मतलब सी # संरचना के बराबर है? एक मूल्य प्रकार, कोई संदर्भ नहीं, शून्य नहीं हो सकता है, कचरा कलेक्टर नहीं मारा जाता है? –

उत्तर

1

नहीं, आपको सामान्य "structs" के लिए Object एस का उपयोग करना होगा।

हालांकि int के जोड़े जैसे साधारण डेटा संरचनाओं के लिए, आप स्मृति को बचाने और गति बढ़ाने के लिए थोड़ी सी चाल का उपयोग कर सकते हैं।

int a = 9; 
int b = 10; 
long pair = (a << 32)|b; 

यह एक long में a और b के 32 बिट पैक। इस तरीके से उन्हें निकालने के लिए:

a = (int)(pair >> 32); 
b = (int)pair; 
1

एक अतिरिक्त tskuzzy's answer करने के लिए: एक और संभावना किसी भी कक्षा बिंदु मान संग्रहीत की जरूरत है कि में Point वर्ग से int x और int y क्षेत्रों लिफ्ट करने के लिए किया जाएगा। जवाब में

संपादित करें टिप्पणी करने के लिए:

एक बात तुम कर सकते हो हर वर्ग के एक बिंदु मूल्य एक Point वर्ग का विस्तार संग्रहीत करने की आवश्यकता है कि है। कोई तार्किक नहीं होगा-एक रिश्ते, लेकिन यह आपको एक इंटरफ़ेस के माध्यम से Point ऑब्जेक्ट तक पहुंच प्रदान करता है। यह किसी भी कक्षा के लिए काम नहीं करेगा (मुझे नहीं लगता) कि कई बिंदु मानों को स्टोर करने की आवश्यकता है।

+0

यही वह है जिसे हम कर रहे हैं। लेकिन हमारे पास कक्षा में इनमें से एक समूह है और इसलिए सभी गन्दा हो जाते हैं। मुझे ऑब्जेक्ट इंटरफेस की सफाई खोने से नफरत है। ओह ठीक है, जीवन अपूर्ण है। –

+0

आप अभी भी एक ऑब्जेक्ट लिख सकते हैं जिसमें एक अच्छा इंटरफ़ेस है, लेकिन अधिक मेमोरी कुशल कार्यान्वयन का उपयोग करता है। –

2

जावा पर अब कोई संरचना नहीं है, हालांकि मुझे विश्वास है कि उन्हें भविष्य के संस्करणों के लिए संकेत दिया गया है। अभी भी फ्लाईवेट पैटर्न पर नज़र डालें, हो सकता है कि आप http://en.wikipedia.org/wiki/Flyweight_pattern

+0

दुर्भाग्यवश इन सभी के पास अलग-अलग मान हैं। या अधिक सटीक होने के लिए, प्रत्येक को किसी भी समय एक अलग मूल्य पर सेट किया जा सकता है। –

+0

अच्छी तरह से पैटर्न कहता है कि वस्तुएं अपरिवर्तनीय हैं लेकिन आप पूल से नया प्राप्त करके ऑब्जेक्ट का संदर्भ बदल सकते हैं, आपकी 100k + ऑब्जेक्ट्स में से अधिकांश अलग-अलग हैं?, क्या आप इसे उन हिस्सों में दोबारा नहीं कर सकते हैं जो अलग-अलग पूल-सक्षम हैं? – ilcavero

+0

यह शायद कुछ सौ का पूल होगा। लेकिन यह समस्या को हल करता है क्योंकि प्रत्येक सेट तब मैप लुकअप और असाइनमेंट बन जाता है। मुझे लगता है कि प्राइमेटिव को सीधे स्टोर करने और उन पर काम करने के लिए स्थिर तरीके रखने से भी बदतर होगा। मुझे सी के पुराने दिनों में वापस ले जाता है जहां मैंने लिखा कोड, हिंडसाइट में, ऑब्जेक्ट उन्मुख के रूप में आप केवल structs के साथ प्राप्त कर सकते थे। –

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